Сообщения на форуме пользователя Andrey (188 стр.)
Сокеты WinSock2 | 20 мар. 2006 | 11:47 | #3 |
---|
Cracked Mind
Спасибо!!! неплохой документик :)
Спасибо!!! неплохой документик :)
Как лучше организовать таймер? | 20 мар. 2006 | 11:24 | #0 |
---|
Привет всем!!
У нас возник спор по поводу релизации работы с таймерами в игре. Предложены 2 версии. Прошу вас оценить их и посоветовать какую версию использовать лучше.
Версия первая: Версия вторая:
2)
использования 1 версии:
использования 2 версии:
Прошу оценить обе реализации по следующим критериям:
1) скорость выполнения;
2) простота и наглядность использования;
3) универсальность.
У нас возник спор по поводу релизации работы с таймерами в игре. Предложены 2 версии. Прошу вас оценить их и посоветовать какую версию использовать лучше.
Версия первая: Версия вторая:
2)
class Timer { public: virtual void OnTimer(unsigned id) = 0; unsigned CreateTimer(unsigned elapse) { return timer_processor->CreateTimer(this, elapse); } ~Timer() { timer_processor->KillTimer(this); } private: static TimerProcessor *timer_processor; friend class TimerProcessor; }; class TimerProcessor { public: TimerProcessor(); unsigned CreateTimer(Timer*,unsigned); void KillTimer(Timer*); void KillTimer(unsigned); void Check(); private: unsigned counter; struct TimerStruct { unsigned ID; Timer *tm; unsigned elapse; unsigned last_tick; }; std::vector <TimerStruct> timers; }; TimerProcessor::TimerProcessor() { Timer::timer_processor = this; counter = 0; } unsigned TimerProcessor::CreateTimer(Timer *t,unsigned elapse) { TimerStruct ts = {counter++, t, elapse, timeGetTime() }; timers.push_back(ts); return counter; } void TimerProcessor::KillTimer(Timer *t) { for (std::vector<TimerStruct>::iterator iter = timers.begin(); iter != timers.end(); iter++) if ( (*iter).tm == t) timers.erase(iter); } void TimerProcessor::KillTimer(unsigned id) { for (std::list <TimerStruct>::iterator iter = timers.begin(); iter != timers.end(); iter++) if ( (*iter).ID == id) { timers.erase(iter); break; } } void TimerProcessor::Check() { unsigned cur_time = timeGetTime(); for (std::list <TimerStruct>::iterator iter = timers.begin(); iter != timers.end(); iter++) if ((*iter).last_tick + (*iter).elapse < cur_time) { (*iter).last_tick = cur_time; (*iter).tm->OnTimer((*iter).ID); } } //игровой объект class GameObject : public Timer { ... //переопределяем виртуальную функцию virtual void OnTimer(unsigned id) { ... //нужен если много таймеров у одного объекта switch (id) { //и делаем то что нужно по истечении времени }; }; ... }; |
TimerProcessor timerProcessor; //вызываем проверку таймеров в главном цикле. timerProcessor.Check()
//игровой объект class GameObject { Timer timer; ... virtual void Update(...) //вызывавем в главном цикле { if (timer.Check()) { //вот тут делаем то что нужно по истечении времени } };
1) скорость выполнения;
2) простота и наглядность использования;
3) универсальность.
Правка: 20 мар. 2006 14:48
Загрузка картинки | 17 мар. 2006 | 17:58 | #4 |
---|
Не могу понять fwrite. | 15 мар. 2006 | 17:01 | #37 |
---|
Димка
>fopen() неудобен двумя вещами:
>1. Отсутствие корректной обработки неправильных аргументов
ferror не пойдет? неправильные аргументы это второй параметр типа "r", "w" "rb", "wb"...?
>2. Геморрой с выяснением причины возврата NULL-pointer и последующего анализа глобальной переменной errno.
мне кажеться это мелочи достаточно написать свой класс обернуть в него все операции с FILE * и все...
Короче я так понял тут дело вкуса...
>fopen() неудобен двумя вещами:
>1. Отсутствие корректной обработки неправильных аргументов
ferror не пойдет? неправильные аргументы это второй параметр типа "r", "w" "rb", "wb"...?
>2. Геморрой с выяснением причины возврата NULL-pointer и последующего анализа глобальной переменной errno.
мне кажеться это мелочи достаточно написать свой класс обернуть в него все операции с FILE * и все...
Короче я так понял тут дело вкуса...
Не могу понять fwrite. | 15 мар. 2006 | 16:27 | #33 |
---|
const
fycom
Ребят давайте жить дружно :)
ANSI C более 30 лет используется в том числе и fopen и будет минимум еще столько использоваться
дак зачем всякое придумали типа errno_t и все фнункции ANSI С + "_s" ?
fycom
Ребят давайте жить дружно :)
ANSI C более 30 лет используется в том числе и fopen и будет минимум еще столько использоваться
дак зачем всякое придумали типа errno_t и все фнункции ANSI С + "_s" ?
Tokamak в DX - Помогите Плиз!!! | 15 мар. 2006 | 13:28 | #6 |
---|
-=frame=-
нсли матрица твой тип то прреобразовать надо указатель.
попробуцй так:
нсли матрица твой тип то прреобразовать надо указатель.
попробуцй так:
IDirect3DDeviceN::SetTransform(D3DTS_WORLD, reinterpret_cast< D3DXMATRIX *>(&твоя_матрица)); |
Не могу понять fwrite. | 14 мар. 2006 | 19:27 | #18 |
---|
SimpleProger
>Переполнения, в книге "Защищенный код" приводится список того что нельзя просто так вызывать из стандартной библы,
>функции из string.h там тоже есть.
Книга видать интересная... а что за переполнение?
ferror же есть можно проверять что возвратили эти функции... ни разу проблем не было...
>Переполнения, в книге "Защищенный код" приводится список того что нельзя просто так вызывать из стандартной библы,
>функции из string.h там тоже есть.
Книга видать интересная... а что за переполнение?
ferror же есть можно проверять что возвратили эти функции... ни разу проблем не было...
Не могу понять fwrite. | 14 мар. 2006 | 17:51 | #16 |
---|
const
>То что майкрософт считает их депрекейтнутыми - ничего еще не значит. Тем более, что их всего лишь попробовали сделать >более безопасными.
можн поподробнее в чем их опасность?
>То что майкрософт считает их депрекейтнутыми - ничего еще не значит. Тем более, что их всего лишь попробовали сделать >более безопасными.
можн поподробнее в чем их опасность?
Не могу понять fwrite. | 14 мар. 2006 | 14:25 | #13 |
---|
Feo#1
>fwrite - устаревшая функция
это что за бред???? :)))) это ANSI C
std::fstream/ofstream ее вызывают полюбому
>fwrite - устаревшая функция
это что за бред???? :)))) это ANSI C
std::fstream/ofstream ее вызывают полюбому
Я изменяю матрицу а получаеться не мешь перемещаеться а камера? | 14 мар. 2006 | 11:49 | #5 |
---|
Keysall
Привет!
ты мне как-то помогал :)
Intel C++ 8.1 надо?
Привет!
ты мне как-то помогал :)
Intel C++ 8.1 надо?
Я изменяю матрицу а получаеться не мешь перемещаеться а камера? | 14 мар. 2006 | 11:32 | #3 |
---|
stim24
тогда делай так:
тогда делай так:
D3DXMATRIX MatView; D3DXMATRIX Mat; D3DXMATRIX MatWorld; //перемещение на вектор D3DXMatrixTranslation(&Mat, x, y, z); //тут просто перемещаем мешь //получаем матрицу вида pDevice -> GetTransform(D3DTS_VIEW, &MatView); //перемножаем D3DXMatrixMultiply(&MatWorld, &Mat, &MatView); //результирующая матрица для меша pDevice -> SetTransform(D3DTS_WORLD, &MatWorld);
Я изменяю матрицу а получаеться не мешь перемещаеться а камера? | 14 мар. 2006 | 10:04 | #1 |
---|
stim24
может надо D3DTS_VIEW вместо D3DTS_WORLD ?
может надо D3DTS_VIEW вместо D3DTS_WORLD ?
Какой компайлер выбрать? | 13 мар. 2006 | 13:25 | #81 |
---|
Keysall
>Winnie , подскажи кстати где можно
>Intel C++ качнуть ?
>пасиб...
могу на почту закинуть :)
C++ Builder полное убожество :)
борльше говорить нечего я охренел от 29 поста то что написал Executor
>Winnie , подскажи кстати где можно
>Intel C++ качнуть ?
>пасиб...
могу на почту закинуть :)
C++ Builder полное убожество :)
борльше говорить нечего я охренел от 29 поста то что написал Executor
Вылетает LuaBind | 13 мар. 2006 | 11:21 | #17 |
---|
Mordoproglot
>Но вот что интересно - у меня все пашет (притом правильно), если в луа- файле нет ошибок. А когда они появляются - прога >вылетает на lua_dofile. Может дело в каких-то настройках проекта ?
врядли тут настройки проекта у меня тоже такое былопри ошибке в скрипте падает проект, но я не использовал lua_dofile
я делал обмен данными C/C++ -> Lua скрипт / Lua скрипт -> C/C++.
Выложи код скрипта, может специалисты по языку Lua подскажут. Моэет ты там сильно с таблицами замутил?
Если не можешь понять где ошибка, методом исключения найди то место где вылетает и разберись с этим.
>Но вот что интересно - у меня все пашет (притом правильно), если в луа- файле нет ошибок. А когда они появляются - прога >вылетает на lua_dofile. Может дело в каких-то настройках проекта ?
врядли тут настройки проекта у меня тоже такое былопри ошибке в скрипте падает проект, но я не использовал lua_dofile
я делал обмен данными C/C++ -> Lua скрипт / Lua скрипт -> C/C++.
Выложи код скрипта, может специалисты по языку Lua подскажут. Моэет ты там сильно с таблицами замутил?
Если не можешь понять где ошибка, методом исключения найди то место где вылетает и разберись с этим.
Вылетает LuaBind | 11 мар. 2006 | 16:03 | #14 |
---|
Mordoproglot
что внутри LuaScript1.lua ?
>>mLuaState == NULL? или там вообще мусор?
>нет, там все ок - это точно !
1) lua_open() вызывал?
2) ты бибилиотеки Lua API загружал?
3) посмотри еще мою тему:
http://www.gamedev.ru/forum/?group=0&topic=21779
там много ритмеров кода
4) выложи полный код тогда снанет понятно что нетак.
что внутри LuaScript1.lua ?
>>mLuaState == NULL? или там вообще мусор?
>нет, там все ок - это точно !
1) lua_open() вызывал?
2) ты бибилиотеки Lua API загружал?
3) посмотри еще мою тему:
http://www.gamedev.ru/forum/?group=0&topic=21779
там много ритмеров кода
4) выложи полный код тогда снанет понятно что нетак.
Правка: 11 мар. 2006 16:04