![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2011
Сообщений: 38
|
здравствуйте! пишу игрушку-стрелялку с видом сверху. очень интересует ваш опыт.
при инициализации "раунда" в классе Game (создается новый экземпляр при каждом новом раунде) заполняется массив obj со ссылками на собственно человечков, снаряды и т.д. то есть перед началом раунда имеется массив: также есть вспомогательный массив free_obj, который хранит в себе булевы значения true/false, длина такая же, как и у obj. если free_obj[ n ] == false, этот объект опрашивается. если true, объекта как бы уже нет (погиб например), и опрос не производится. функция ongoing класса Game вызывается через ENTER_FRAME 36 раз в секунду и вызывает соответствующую функцию main каждого человечка/снаряда, которой передаются нажатия клавиш (если человечек - главный герой, то есть управляемый игроком). в ней изменяются координаты соответственно модели поведения и производится расчет пересечений/столкновений с другими объектами. то есть если у нас 10 объектов, опрос будет выглядеть так: 1 объект опрашивает 2,3,4...10й, потом второй объект опросит 1,3,4...10й и так далее. расчет столкновений реализован так - если расстояние между двумя объектами больше определенного значения (как правило, двойной диаметр опрашиваемого плюс скорость по модулю), сравниваются значения координат/ширины/высоты и отправляется ответ от функции - было столкновение, или не было. то есть если первый объект в одном конце экрана, а второй в другом, они друг друга опрашивать не будут. раз в 4-5 секунд производится оптимизация массива, например, если у нас было 4 объекта-человечка, которые постоянно стреляют, то при генерации нового снаряда само собой увеличивается длина массива. потом (после взрыва снарядов) эти элементы уже не нужны, потому что указывают на null, и массив перестраивается - остаются только не-null-значения. производительность этого движка меня как-то не устраивает. очень прошу подсказать, что я делаю не так, потому что я почти уверен, что эти вещи можно как-то оптимизировать. заранее спасибо за ответы. Последний раз редактировалось Monade 2; 15.03.2012 в 21:37. |
|
|||||
|
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
не трать зря время, используй box2d
|
|
|||||
|
Регистрация: Apr 2011
Сообщений: 38
|
|
|
|||||
|
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
зато работает быстро... не знаю какой у вас уровень, но я например точно уверен что я не смогу сделать так же
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
ну или хотя бы покопайтесь в его исходниках.
__________________
Отряд Котовскага |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Так а что именно тормозит?
Навскидку - нет широкой фазы. Это правда может ускорить. Возможно, поможет замена массива на список и/или не использовать вообще удаление из массива через slice (только помечать).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Регистрация: Apr 2011
Сообщений: 38
|
как вариант, пороюсь.
тормозит игра (FPS падают), если больше тридцати криттеров. конечно, можно от этого уйти и не спавнить всех сразу, то есть слегка поменять игровой процесс. Цитата:
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Вопрос "что тормозит" был к тому, что собсно править надо именно то, что тормозит. Если вся игра, то всю игру)
Надо определить, что же конкретнее начинает жрать много. Ну в общем на геймдеве там в терминах в разделе физика даны основные понятия о том, как физ. двиги работают, читайте) Возможно даже тяжелой артиллерии не надо, только завести собсно AABB и проверку по ним и если было просчитано взамиодействие 1 с 2, то не проверять, как у вас делается, взаимодействие 2 с 1.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
[+4 07.04.12]
[+1 20.01.12] Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
|
да если бы ты использовал box2d, то мог бы протестить без графики на отладочной отрисовке, а так даже не знаю что тебе посоветовать =)
|
|
|||||
|
Регистрация: Apr 2011
Сообщений: 38
|
Цитата:
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:14. |
|
|
« Предыдущая тема | Следующая тема » |
|
|