|
|
#281 | ||
|
Заблокирован
Регистрация: 16.09.2006
Адрес: Matrix4x4
Сообщений: 56
Репутация: 10
Предупреждения: 400 |
Цитата:
А по какой вы части если не секрет. Уж не сетевое ли программирование часом? |
||
|
|
|
|
|
#284 | ||
|
Юзер
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112
|
pokibor
Неудивительно, но у меня опять возник вопрос, теперь более глобальный
__________________
www.rodionovstepan.ru |
||
|
|
|
|
|
#285 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
. учти, что загрузка ресурсов - процесс не такой быстрый, так что думай, принимая решение.Теперь по поводу кода. Тут нужно сделать для удобства две отдельные функции: [code] void Меню (IrrlichtDevice *Device);//Отвечает за обработку меню void Игра (IrrlichtDevice *Device);//Отвечает за игру [code] Певая функция будет, собственно, рисовать в цикле рендера твое меню, назначит Device'у перед началом рисования обработчик и прочее. В общем, выглядить она будет примерно так: Код:
void Меню (IrrlichtDevice *Device) {
Загузить_Или_Создать_Все_Элементы_Меню();
Device->setEventReceiver(new Обработчик_Событий_Для_Меню());
while (Не_Надо_Выходить) {
Нарисовать_Меню();
}
}
Код:
void Начать_Игру() {
for each Элемент_Интерфейса_Меню {
Элемент_Интерфейса_Меню->setVisible(false);
//Куда разумней сделать элементы невидимыми, чем удалять, а
//при выходе из игры назад в меню создавать их.
//Впрочем, это зависит от того, какие у тебя это
//элементы и сколько их...
}
//Обработчик событий
delete Device->getEventReceiver();
Device->setEventReceiver(NULL);
//Теперь элементы интерфейса невидимы, так как твои рисунки
//рисуются в цикле рендера меню, а Receiver вызывает обработчики
//в том же потоке, то, пока мы не выйдем из этой функции,
//они рисоваться не будут
//И запускаем обработку игры
Игра(Device);
//Теперь, когда мы выйдем из игры, нужно опять показать
//все элементы меню
for each Элемент_Интерфейса_Меню {
Элемент_Интерфейса_Меню->setVisible(true);
}
//И восстанавливаем обработчик меню
Device->setEventReceiver(new Обработчик_Событий_Для_Меню());
}
Код:
void Игра (IrrlichtDevice *Device) {
Загрузить_Все_Каркасы_И_Текстуры_Игры();
Device->setEventReceiver(new Обработчик_Событий_Для_Игры());
while(Не_Нужно_Выходить_Из_Игры) {
Рисуем_И_Обрабатываем_Все_Что_Нужно_Для_Игры();
}
//Мы выходим из игры
Device->getSceneManager()->clear();//Очищаем сцену от всех node'ов
//Теперь удаляем анимированные каркасы, простые каркасы и текстуры
for each Анимированный_Каркас
{
Device->getSceneManager()->getMeshCache()->removeMesh(Анимированый _Каркас);
}
for each ПростойКаркас
{
ПростойКаркас->drop();
}
for each Текстура
{
Device->GetVideoDriver()->removeTexture(Текстура);
}
//Обработчик событий
delete Device->getEventReceiver();
Device->setEventReceiver(NULL);
//Ну и в итоге у нас чистая сцена, память очищена - и мы
//спокойно возвращаемся в меню
}
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#286 | ||
|
Юзер
Регистрация: 07.06.2006
Адрес: this
Сообщений: 162
Репутация: 112
|
pokibor
Большое тебе спасибо! Но у меня по приведенному тобой коду есть несколько вопросов. Первый: в функции void Menu (IrrlichtDevice *Device) есть цикл, так вот у меня вопрос связанный с его условием выполнения, т.е. что такое "Не_Надо_Выходить". Второй: Элемент_Интерфейса_Меню, я так понимаю, это может быть button, static text, scroll bar, да? Тогда писать надо так: Код:
for each button
{ button->setVisible(false);
}
for each staticText
{ static->setVisible(false);
}
Код:
for each button
{ button->setVisible(false);
static->setVisible(false);
scroll->setVisible(false);
}
И наконец Спасибо!
__________________
www.rodionovstepan.ru |
||
|
|
|
|
|
#287 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Странный вопрос. Не_Надо_Выходить - это некое условие, как его написать - твое дело. Например, если у тебя будет некая переменная is_exit, которая по умолчанию false, а когда пользователь щелкнет на кнокпе "Выход" станет true - то пиши while (!is_exit). Вообще, ты как-то слишком буквально понимаешь приведенный выше псевдокод.
Теперь по поводу второго вопроса: setVisible в Irrlicht определено в интерфейсе IGUIElement, от которого наследуют все конкретные элементы интерфейса. А как ты их будешь перебирать (тут некоторый пробел в моих знаниях... если не ошибаюсь, в стандарте C++ никаких for each нет, она введена была в .NET, и к Win32-приложениям отношения иметь не должна) - твое дело. Хочешь - пихать ссылки на все создаваемый тобой элементы интерфейса в один массив или вектор на IGUIElement *, хочешь - разделяй по типам, хочешь - вообще заводи отдельные переменные для каждого добавляемого элемента и вручную прописывай setVisible им всем.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#289 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Кошмар! Ты хоть хелпом пользуешься и примеры разбираешь? В createDevice есть соответствующая переменная:
Код:
IrrlichtDevice* irr::createDevice ( video::E_DRIVER_TYPE deviceType = video::EDT_SOFTWARE, const core::dimension2d< s32 > & windowSize = core::dimension2d< s32 >(640, 480), u32 bits = 16, bool fullscreen = false, //Вот и оно. Что передать, надеюсь, сам догадаешься bool stencilbuffer = false, bool vsync = false, IEventReceiver * receiver = 0, const char * sdk_version_do_not_use = IRRLICHT_SDK_VERSION )
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#291 | ||
|
Юзер
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28
|
Ну чтож, сюда, так сюда. Шейдеры говорите? А можно поподробней?
Я думал, что шейдеры только и умеют, что воду красивую делать, да кубики блестящие рисовать
__________________
Эта подпись всех задолбает!!! Ну а хотя, кто её знает? |
||
|
|
|
|
|
#292 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Нет, не можем. Потому что это один из тех вопросов, по которым впору книжки писать. Так что вооружайся книжками и статьями из Интернета - и впреред. Как шейдеры в Irrlicht использовать, смотри идущий с Irrlicht пример 10.Shaders, а вот как их писать - учись. Могу лишь сказать, что тебе неплохо бы сразу выбрать, какую библиотеку ты будешь использовать - Direct3D или OpenGL (в Irrlicht, как ты должен знать, можно использовать любую из них). В первом случае после изучения основ принимайся за HLSL, во втором - за GLSL. Ну а некоторую общую информацию по шейдерам смотри http://forum.igromania.ru/showpost.p...&postcount=594.
Еще тебе, кстати, придется с версией определится, но про возможности каждой версии вершинных и пиксельных шейдеров узнаешь в процессе изучения онных.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#294 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Тут выхода два - либо ты переписываешь исходники Irrlicht, либо самостоятельно правишь координаты вершин. Во втором случае я не нашел, как в Irrlicht сгенерить каркас заданой конфигурации, так что тебе нужно будет сделать некий базовый каркас - плоскость с нужным тебе количеством вершин по горизонтали и вертикали, и потом в Irrlicht подправить координаты ее вершин
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#295 | ||
|
Юзер
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28
|
Так почему же ты считаешь, что шейдерами делать следы от пуль в стенах проще? Испокон веков это делали спрайтами, а вот теперь ты предлагаешь делать их шейдерами, утверждая что так проще. Проще кому? Компьютеру при расчётах? отлично, но лично я пока за этим не гонюсь
__________________
Эта подпись всех задолбает!!! Ну а хотя, кто её знает? |
||
|
|
|
|
|
#296 | |||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Цитата:
Цитата:
Насколько я понимаю, для определения коллизии ты используешь getCollisionPoint? Так вот, в него последним параметром по ссылке идет переменная типа triangle3df, в которую записывается, с каким треугольником (т.е. собственно полигоном) столкнулся луч. А у треугольника есть метод getNormal(). Вот тебе и нормаль. Ты хоть хелп читай в отношении тех функций и классов, которыми пользуешься.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
|||
|
|
|
|
|
#297 | ||
|
Юзер
Регистрация: 06.11.2005
Адрес: кому надо спросит.
Сообщений: 140
Репутация: 28
|
А это правда, что у ирлихта большая нелюбовь к 3ds файлам новой версии 3DMax-а? Есть-ли способ их подружить, если это не сложно конечно? А то меня как-то не прельщает конвертить файлы
![]() А какой формат файлов у ирлихта самый "любимый"?
__________________
Эта подпись всех задолбает!!! Ну а хотя, кто её знает? |
||
|
|
|
|
|
#298 | ||
|
Кандидат наук
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,375
Репутация скрыта
|
Цитата:
Экспортер для 3D Studio Max в x качай здесь: http://www.andytather.co.uk/Panda/di...downloads.aspx.
__________________
Товарищ, верь: пройдет она - Эпоха лживых, злых понятий. Весь мир очнется ото сна, И на обломках "демократий" Напишут наши имена! Мы были волшебницами (оригинальное фентези) Тень Войны (фанфик по ГП) |
||
|
|
|
|
|
#299 | ||
|
Guest
Сообщений: n/a
|
Перевернуть координаты XYZ -> XZY
Имеется ли способ привести координаты ирлихта в соответствие с привычным:
X - горизонтальная ширина (вправо-влево от зрителя) Y - горизонтальная глубина (ближе-дальше от зрителя) Z - вертикальная высота Чтобы где нибудь в заголовке один раз прописать и потом пользоваться... |
||
|
|
|
|