Наше комьюнити:   OpenGL Shader Lab  •  Half-Life FX  •  Форум  
HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > нуб вопросы от <censored> и других нубов
чтобы не создавать сто тем создам одну
2 голосов
Страницы (111): « Первая ... « 107 108 109 110 [111]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Smykov
Частый гость

Группа: Неопытный
Дата регистрации: Jul 2017
Проживает: Unknown City
Сообщений: 49
Возраст: 19

Рейтинг



Хочу сделать vgui-класс, выводящий текст на родительской Panel (это только лишь в данный момент хочется чтобы только лишь выводил).

Текст располагается относительно своей позиции, делая отступ в зависимости от textLocation.

Как сейчас я понимаю принцип работы панелей:
1) Создали мы экземпляр класса, унаследованного от Panel;
2) Задали родителя, который вызывает paint'ы дочерних элементов;
3) Вот тут уже под вопросом. Внутри paint'а самого экземпяра система координат либо относительная (К примеру, drawSetTextPos(0, 0) ==getPos(varX, varY), то есть положение экземпляра на родителе), либо абсолютная (drawSetTextPos(varX, varY)==getPos(varX, varY), может мутно, но надеюсь, вы меня поняли :-) )
В итоге, отрисовка только фона, притом, что в конструкторе задал false. текста нету.

C++ Source Code:
using namespace vgui;

class CLinkLabel : public Panel {
public:
    CLinkLabel() {
        setPaintBackgroundEnabled(false);
        m_textLocation=Location::l_left;
    }
CLinkLabel(const char* text) : m_linkValue(text) { CLinkLabel(); }
CLinkLabel(const String& str) : m_linkValue(str) { CLinkLabel(); }

enum Location { l_left=0, l_right=1, l_center=2 };

void setText(const char* text) {
    m_linkValue=text;
}
void setTextLocationOnPos(CLinkLabel::Location argLocation) {
    m_textLocation=argLocation;
}
private:
void paint() {
    const char* text=m_linkValue.getChars();
    int textLength=m_linkValue.getCount();
    
    CSchemeManager *pSchemes=gViewPort->GetSchemeManager();
    SchemeHandle_t hTitleFontScheme=pSchemes->getSchemeHandle("Briefing Text");
    Font* pFont=pSchemes->getFont(hTitleFontScheme);
    
    drawSetTextFont(pFont);
    drawSetTextColor(64, 128, 228, 0);
    
    int x, y, wide, tall;
    getPos(x, y);
    pFont->getTextSize(text, wide, tall);
    
    switch(m_textLocation) {
        case l_left:
            break;
        case l_right:
            x-=wide;
        break;
        case l_center:
            x-=wide/2;
    }
    
    drawSetTextPos(x, y);
    
    drawPrintText(text, textLength);
}
private:
String m_linkValue;
Location m_textLocation;

//Font* m_pFont;
};



C++ Source Code:
// Где-то в конструкторе родителя
// CLinkLabel* m_pLinkLabel; // объявление в заголовочном файле

m_pLinkLabel=new CLinkLabel("SampleText1 it's ROAR");
m_pLinkLabel->setParent(this);
m_pLinkLabel->setPos(325, 250);
m_pLinkLabel->setSize(300, 60);



Размеры элементы задал на всякий крайний, вдруг он внутри самого себя отрисовку делает, то есть drawSetTextPos(0, 0)==m_pLinkLabel->setPos(325, 250).

Отредактировано Smykov 21-04-2018 в 15:36

Сообщить модератору | | IP: Записан
Сообщение: 172332

Старое сообщение 21-04-2018 15:31
- За что?
 ~ X ~
offline

Дата регистрации: Oct 2005
Проживает: (void)
Сообщений: 3137
Нанёс повреждений: 0 ед.

Рейтинг



Награды
 
[1 награда]


Меня малость напрягает
void setText(const char* text) {
m_linkValue=text;
}

к моменту вызова paint() указатель точно валидный? дебаггером смотрел?

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Связь со мной здесь: [email protected]

Сообщить модератору | | IP: Записан
Сообщение: 172354

Старое сообщение 23-04-2018 08:38
-
Smykov
Частый гость

Группа: Неопытный
Дата регистрации: Jul 2017
Проживает: Unknown City
Сообщений: 49
Возраст: 19

Рейтинг



~ X ~ там конструкторы есть, которые инициализируют m_linkValue.
Сейчас уже кое-что прояснилось, система координат относительная, а проблема была в том, что у объекта не было size'а, он отрисовывался, но не было места куда выводить.
Другая проблема.

Создаём объект

C++ Source Code:
m_pLinkLabel=new CLinkLabel("SampleText1 it's ROAR");
m_pLinkLabel->setParent(this);
m_pLinkLabel->setPos(15, 60);
m_pLinkLabel->setSize(300, 150);



Стандартное значение m_textLocaition равно l_left, то есть текст "не съезжает" никуда.

Функция paint, у которой для теста мы зададим x и y координаты текста.
C++ Source Code:
const char* text=m_linkValue.getChars();
int textLength=m_linkValue.getCount();

CSchemeManager *pSchemes=gViewPort->GetSchemeManager();
SchemeHandle_t hTitleFontScheme=pSchemes->getSchemeHandle("Briefing Text");
Font* pFont=pSchemes->getFont(hTitleFontScheme);

drawSetTextFont(pFont);
drawSetTextColor(64, 128, 228, 0);

int x=0, y=0, wide, tall;
pFont->getTextSize(text, wide, tall);

switch(m_textLocation) {
    case l_left:
        break;
    case l_right:
        x-=wide;
    break;
    case l_center:
        x-=wide/2;
}

drawSetTextPos(x, y);
drawPrintText(text, textLength);



Я приведу несколько примеров, изменяя x. Всё это на Xash3D

1) x=0 y=0


2) x=-10 y=0


3) x=-11 y=0
Вроде всё нормас, на один пиксель сместились


4) x=-12 y=0
И ещё на один пиксель, и аж на два символа сместились


Вот всё это к чему, и опять таки повторюсь. Может я неправильно расставляю позиции, или ещё что делаю не так?
Просто у меня догадок особо не стало, когда этот же код на GoldSrc (SDK 2005 с этого сайта вроде бы) скопировал, и там нормально работает, по крайней мере без всяких этих тестов, уже текст нормально позиционируется.

GoldSrc. Зададим уже сразу l_center
x=getPosX(/*функция для наглядности*/)-wide/2; y=0


Думаю в подробностях объяснил свой вопрос, что посоветуете?

Сообщить модератору | | IP: Записан
Сообщение: 172365

Старое сообщение 23-04-2018 19:07
- За что?
Crystallize
Липучка

Дата регистрации: Jul 2007
Проживает: (void)
Сообщений: 1849

Рейтинг



А gaitsequence как-то влияет на viewangles и направление движения игрока как энтити или оно просто для красоты, для модельки? И есть ли в ХЛ какой-то ограничитель скорости поворота игрока? (при thirdperson)

Сообщить модератору | | IP: Записан
Сообщение: 172369

Старое сообщение вчера 07:10
- За что?
 Дядя Миша
who said meow?

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 21685
Нанёс повреждений: 360 ед.

Рейтинг



Crystallize только для модельки

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

Сообщить модератору | | IP: Записан
Сообщение: 172371

Старое сообщение вчера 08:00
-
 ~ X ~
offline

Дата регистрации: Oct 2005
Проживает: (void)
Сообщений: 3137
Нанёс повреждений: 0 ед.

Рейтинг



Награды
 
[1 награда]


VGUI - это местный ад для хл-моддеров. В него ссылают по плохим указателям... )
Я сам уже не помню, каким чудом что-то там сделал. Хотя, нет. Так и не сделал. Меню с игроками появляется не там где я изначально хотел

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Связь со мной здесь: [email protected]

Сообщить модератору | | IP: Записан
Сообщение: 172375

Старое сообщение вчера 09:51
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 02:34. Новая тема    Ответить
Страницы (111): « Первая ... « 107 108 109 110 [111]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > нуб вопросы от <censored> и других нубов
чтобы не создавать сто тем создам одну
2 голосов
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Chain Studios © 2005-2018

Рейтинг@Mail.ru