Цитата:
Сообщение от razor21
(Сообщение 1138506)
1. Можно ли менять цвет кнопок, edit box'ов, label'ов, заднего фона? Как?
|
И да, и нет. Меняется как бы общий цвет для каждого элемента управления, т.е. как бы каждому элементу задается общий оттенок. Это делается так (пример из кода моей игры, ALPHA - прозрачность интерфейса):
Код:
#define ALPHA 255
for (s32 i=0; i<EGDC_COUNT ; ++i)
{
SColor col = env->getSkin()->getColor((EGUI_DEFAULT_COLOR)i);
col.setAlpha(ALPHA);
env->getSkin()->setColor((EGUI_DEFAULT_COLOR)i, col);
}
env->getSkin()->setColor(EGDC_3D_FACE, SColor(ALPHA,0,128,0));
env->getSkin()->setColor(EGDC_3D_SHADOW, SColor(ALPHA,0,128,0));
env->getSkin()->setColor(EGDC_HIGH_LIGHT , SColor(ALPHA,0,128,0));
env->getSkin()->setColor(EGDC_3D_HIGH_LIGHT, SColor(ALPHA,128,160,128));
env->getSkin()->setColor(EGDC_WINDOW, SColor(ALPHA,128,160,128));
#undef ALPHA
В общем, за визуальный вид интерфейса отвечает IGUISkin. У него много интересных методов... Смотри хелп.
Цитата:
Сообщение от razor21
(Сообщение 1138506)
2. Как поменять размер шрифта?
|
Где? Если в интерфейсе, то шрифт меняется так:
Код:
env->getSkin()->setFont(IGUIFont *Font)
Создается объект с интерфейсом IGUIFont методом getFont GUIEnviroment'а. Шрифт создается из bmp-файла, и потому его размер просто так не поменяешь. Кстати, так в большинстве игр: векторных шрифтов нет, есть только растровые. Привыкай.
Цитата:
Сообщение от razor21
(Сообщение 1138506)
3. Поддерживает ли Irrlicht русские буквы?
|
Да, а то как бы моя игра была на русском языке. Но, во-первых, русские буквы должны быть в шрифте (а шрифт в Irrlicht берется из bmp-файла определенного формата, причем идущая с ним программа для создания этого файла IrrFontTool почему-то шрифты с кириллицей конвертирует как без кириллицы). Я обошел это так: взял моноширинный шрифт и нарисовал все вручную. Могу поделится:
http://www.amais.org.ru/file/index.p...tory=Irrlicht&
Цитата:
Сообщение от razor21
(Сообщение 1138506)
4. Как работать с таймером? т.е. как его подключить к проекту и примерно покажите синтаксис такого примера: каждую секунду значение label'а возрастает на 1.
Подскажите....
|
Не забывай, у тебя в Irrlicht идет бесконечный цикл рендера, навыки из Borland C++ Builder'а тут абсолютно бесполезны. Ты должент каждый раз в этом цикле рендера сам проверять таймер. Время в миллисекундах, прошедшее с момента запуска программы, можно получить так:
Код:
device->getTimer()->getTime();
Если хочешь, можешь получить время с начала работы системы:
Код:
device->getTimer()->getRealTime();
Теперь об организации класса таймера. Можно, например, сделать глобальный список таймеров, каждый раз в циле пробегать его, передавая каждому время. Таймер будет сверять это время со временем своей последней активации, и, если оно больше или равно этому времени + интервал таймера, ставить его соответственно и вызывать что тебе нужно, то есть примерно так:
Код:
TTimer::TTimer() {
next_act_time = device->getTimer()->getTime() + interval;
}
void TTimer::checkTimer(unsigned int curTime) {
while (curTime >= next_act_time) {
next_act_time += interval;
OnTimer();//Процедура, срабатывающая в таймере
}
}
В коде выше цикл while нужен для того, чтобы если у нас слишком маленькие FPS и время работы цикла больше интервала таймера, то таймер срабатывал за каждое срабатывание. Надеюсь, понятно.