|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.06.2011, 17:07 | #861 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
От каких? ...таймер работает всегда, даже если форма не в фокусе, или свернута, иначе события в игре разойдутся с изображением. OnPaint будет лишний раз выводить изображение.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
12.06.2011, 20:19 | #862 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Неожиданностью я считал сворачивание формы. Если в масштабных играх нажать Alt+Tab, а потом восстановить игру, то приходится ждать ~ 5 секунд, что бы увидеть картинку.
Вопрос относительно таймера, какой интервал ему выставлять? Во многих статьях читал, что ставить его меньше 50 мс не имеет смысла. Разве во время воспроизведения видеозаставок таймер не останавливается (но это уже не по теме)? |
12.06.2011, 22:13 | #863 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
12.06.2011, 23:06 | #864 | ||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Цитата:
Если в таймере с интервалом 16 мс не успевает выполниться внутренний код, то интервал автоматически увеличится еще на 16, если снова не успевает - еще добавит 16, и так пока не будет знать, что код выполнен. Может быть так, что на выполнение кода нужно 20 мс, но таймер с 16 мс интервалом будет выполнять код через каждые 31-32 мс. Минимальный интервал не точный он лежит в пределах 15-18 мс. Если на внутренний код требуется 31 мс, то таймер может работать нестабильно, то увеличивая, то уменьшая скорость, могут быть рывки в изображении. Так что интервал нужно выбирать с умом: 16, 31, 48, 65, 81 и т.д. - все эти интервалы показывают разную скорость анимации, ...у меня.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
||
13.06.2011, 15:08 | #865 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Чем дальше, тем интересней…
Я еще не занимался оптимизацией таймера, но ваши слова побудили меня задуматься о том, что пора пересмотреть код. Сейчас у меня таймер работает так:
ИМХО: таймер — что-то вроде рекурсии, со стеком. То есть, если таймер сработал, то он вызывает себя и выполняет код. Если он это не успевает сделать, то добавляет задание в стек. Система пытается выполнить все задания из стека, но так как она выполняет только одно, а добавляются сразу два, то поручается зависание. Прошу простить и исправить, если это полная чушь. Я так и не понял, идеальный таймер, это тот, у которого интервал должен быть примерно равен времени выполнению кода или интервал нужно специально сделать меньше (больше)? Ради эксперимента поступил так: Код:
С интервалом >=40: In BreakPoint[0] 31 ms | In BreakPoint[0] 16 ms | In BreakPoint[0] 15 ms... При интервале 30-38: In BreakPoint[0] 32 ms | In BreakPoint[0] 15 ms | In BreakPoint[0] 16 ms | ... | In BreakPoint[2] 31 ms А при <=16: In BreakPoint[0] 15 ms | In BreakPoint[0] 16 ms | In BreakPoint[0] 31 ms | In BreakPoint[0] 16 ms | In BreakPoint[0] 31 ms Так как кадров на перемещении персонажа у меня всего 3, причем 1 и 3 спрайты одинаковы, то анимацию я делаю так: кадры меняю, когда задержка анимации равна 4, потом я ее обнуляю. Задержка изменяется в событии таймера. Получается, что анимация из трех кадров занимает 15*x мс, где x это интервал таймера. Вывод: при интервале 15 и меньше анимацию не заметить, с 30-40 смотрится красиво, после 60 эффект замедленной съемки. |
13.06.2011, 16:15 | #866 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Для глаза комфортно 30 кадров в секунду, больше он не ощутит, если анимация раскадрована. 3D совсем другое дело, там нужно не менее 60 кадров в секунду.
С TTimer'ом мудрить не нужно, он сам оттянет время, на то он и простейший чтобы засунуть в него код и не думать успеет он выполниться за интервал или нет. Не успеет - увидишь замедление анимации, а если таймеры на игровой процесс и анимацию разные, то будет дискретное отображение кадров, рывками, то несколько раз один и тот же, то с пропуском некоторых. Чтобы измерить скорость кода через таймер, интервал ставь 1000 мс иначе таймер вмешивается в расчет и после GetTickCount где-нибудь на середине кода оттягивает время, и подсчет уже будет некорректный. Лучше тогда вместо таймера использовать просто кнопку, чтобы по каждому нажатию видеть сколько мс забирает на себе внутренний код.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
13.06.2011, 17:45 | #867 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Что-то у меня все время проскакивают числа 15, 16 и 31. Выставил интервал 32, буду обкатывать. Я тоже думаю 30 FPS для 2D это хорошо, ведь это не shooteer. Раз уж тут прозвучали слова о библиотеках DirectX, то хотел спросить вот еще что:
Если я создаю игру с размерами окна 1024x768 и у пользователя разрешение 800x600, то форма не будет полностью показана. Поэтому я написал такой код: Код:
|
13.06.2011, 18:59 | #868 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Хуже чем 1024x768 сейчас никто не имеет, тут даже про 800х600 не думай. Если ты не применяешь библиотеки, то менять режим монитора не следует. Нужно только определить разрешение, залить все черным, а свою игру выводить по центру в размере 1024х768.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
13.06.2011, 19:17 | #869 |
Форумчанин
Регистрация: 20.04.2009
Сообщений: 136
|
Что в моей игре этот метод смотрится не интересно:
e63c2b463b98.jpg Скажите, а как более правильно: if A=False then A:=True или A:=True и все (то есть проверка, а потом присваивание или сразу присваивание)? Последний раз редактировалось Beermonza; 13.06.2011 в 19:40. |
13.06.2011, 19:49 | #870 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
У тебя изображение видать 800х600 изначально, поскольку черная область тоже 4:3 формат, а такое не используется. Лично мне, размазанная графика по экрану не нравится, ...должно быть все четко пиксел в пиксел.
Для заливки картинок переключайся в "Расширенный режим" сообщения, жми скрепку, или внизу "Дополнительные опции", окошко "Вложить файлы", туда можно загрузить форматы, указанные в таблице. Цитата:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 13.06.2011 в 19:51. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уроки по созданию игр для новичков... | -=DeS=- | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 750 | 14.11.2017 20:26 |
Музыка программистов - как вы относитесь к АРИИ? | Весёлый Жека | Свободное общение | 46 | 10.10.2008 22:32 |
Конкурсы по созданию игр на Delphi | mutabor | Свободное общение | 0 | 15.06.2007 12:40 |
Работа по созданию ПО | remix | Фриланс | 3 | 22.04.2007 11:00 |