|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.07.2013, 17:01 | #1 |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Мой движок (Epic Fail Engine)
Здравствуйте форумчане! Я вас снова потревожу (
Дело такое, я пишу свой эпически-отстойный движек для моей эпически-отстойной игрушки (которую я еще не придумал, надо заметить). И у меня уж есть успехи! Да, да... есть первый квадрат и он бегает по экрану ) Вопрос вот в чем, я прикрутил измеритель кадров в секунду и при выходе в консоле показывается информация о последних фпс. Ну так вот, я пробовал по разному и с вертикальной синхронизацией (60фпс) и без (1500 фпс). А вот если я захочу ограничить скажем верхний потолок 30-ю кадрами или 100 в секунду. Это что и как мне нужно будет сделать ? Я предполагаю в процедуре где разруливаются сообщения винды нужно будет ставить какие-то замеры времени и их проверки, как это сделать? Приведу чутку кода чтобы было понятно от чем я. Код:
Код:
|
09.07.2013, 20:08 | #2 |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
А почему Epic? Пока ещё просто Fail.
Я точно не знаю, как устроено ограничение фпс. Наверно в обработке каждого кадра ставится задержка, которая зависит от времени обработки предыдущего кадра. Типо так: sleep((1000 div FPS) - LT); , где FPS - Нужны фпс, а LT время обработки прошлого кадра. |
09.07.2013, 22:06 | #3 | ||
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Цитата:
В добавок возможно с твоей колокольни оно просто менее эпичным смотрится, это да ни взять ни отнять. Цитата:
Код:
И оно вроде бы работает, но фпс все равно больше чем задаю примерно в 2 раза, хз почему. Код:
|
||
10.07.2013, 09:30 | #4 |
Участник клуба
Регистрация: 11.08.2012
Сообщений: 1,226
|
Из кода я мало чего понял (лень вникать в плохо знакомый мне синтаксис, из-за больших расстояний между словами я теряюсь). Возможно, у вас не правильно замеряется время обработки кадра. Для этого лучше всего использовать GetTickCount (у вас в коде присутствует engineGetTicks, что это такое я не знаю).
И ориентироваться только на время просчёта предыдущего кадра - это неправильно. Я лишь для примера это привёл. Попробуйте добавить ожидание, зависимое от среднего времени обработки последних 10 кадров. Это повысит точность. Ну и учитывайте, что подсчёт нужного ожидания сам занимает некоторое время. UPD: Написал небольшой код. Посмотрите, там всё нормально работает. Фпс держится стабильно. Расчёт идёт только на время обработки предыдущего "кадра". Если время обработки не стабильно (постоянно прыгает), то надо добавить расчёт среднего времени обработки кадра. Последний раз редактировалось Kix.IV; 10.07.2013 в 10:13. |
10.07.2013, 11:22 | #5 | ||||
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Цитата:
// вызывается при инициализации движка. Код:
Цитата:
Код:
Цитата:
низя мне добавлять sleep() это один единственный поток в котором по очереди обрабатываются сообщения, логика, прорисовка графики. И поэтому я не могу тормозить логику игры которая идет перед прорисовкой покрайней мере у нее будет своя временная задержка, я лишь могу обходить их в ветвлениях по условию некоторой проверки. Цитата:
смотри предположим мы за Секунду(хочу заметить именно за сек.) имеем разное время прорисовки - elapsedtime() В первом случае будем иметь 0.1 сек т.е 10 раз за сек (10 fps) player.x += elapsedtime(0.1 sec) x player.speed(10) = 1 delta move Во втором случае предположим будем иметь время прорисовки 1 сек. (1 fps) player.x += elapsedtime(1 sec) x player.speed(10) = 10 delta move можно подсчитать что 1 delta move (10 раз) = 10 delta move которые мы получили во втором случае. Зачем мне среднее время ? Мне кажется это как-то не здорово будет влиять на просчеты, объекты будут странно как-то ускоряться то замедляться в зависимости от того какая нагрузка на прорисовку была за измеряемый интервал. |
||||
10.07.2013, 11:59 | #6 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
кстати, Intel учит, что в старых моделях процессоров частота счетчика производительности привязана к частоте ядра и может меняться во время работы. Также на некоторых моделях многоядерных процов, не насмотря на то что скорость прироста счетчика стабильна, значения счетчика на разных ядрах различны, поэтому рекомендуется привязывать поток считающий интервалы времени к одному ядру. Вот такая фигня. |
|
10.07.2013, 15:47 | #7 | |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Цитата:
|
|
10.07.2013, 19:38 | #8 |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Как бы сделать само удаление объектов на Си. Типо деструкторов в с++.
Например. Во время запуска приложения я загружаю массив текстур которые будут использоваться в игре. tex[0] = engineloadTexture("1.bmp"); tex[1] = engineloadTexture("2.bmp"); tex[2] = engineloadTexture("3.bmp"); а во время выхода они бы само удалились. т.е. чтобы не пришлось каждый раз писать для каждой текстурки engineTextureFree(&tex[0]); engineTextureFree(&tex[1]); engineTextureFree(&tex[2]); Они бы делались, но где-то и автоматически. В общем пока вопрос открыт, как ? |
10.07.2013, 20:12 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
auto_ptr<>
|
10.07.2013, 20:31 | #10 |
Играюсь с Python
Форумчанин
Регистрация: 12.12.2012
Сообщений: 340
|
Ты это серьезно?)
Ты мне предлагаешь заюзать на СИ-89 года, шаблоны с умными указателями? И как это будет выглядеть?) Помоему на Си лишь дико макросами можно спамить в коде. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Fail fast | Arween | Помощь студентам | 0 | 31.05.2012 00:22 |
Fail | Prince En | Помощь студентам | 0 | 07.03.2011 15:27 |
string epic fail | Red_Line | Общие вопросы C/C++ | 5 | 09.02.2011 17:43 |
мой движок для текствых игр | Juffin | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 8 | 10.06.2009 18:24 |
Помогитеу становить движок на сайт. Движок Joomla | acmilan | WordPress и другие CMS | 2 | 01.04.2009 11:26 |