![]() |
|
||||||||||
|
|||||
|
Регистрация: 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. |
![]() |
Часовой пояс GMT +4, время: 15:13. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|