Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.03.2012, 21:29
Monade 2 вне форума Посмотреть профиль Отправить личное сообщение для Monade 2 Найти все сообщения от Monade 2
  № 1  
Ответить с цитированием
Monade 2
 
Аватар для Monade 2

Регистрация: Apr 2011
Сообщений: 38
По умолчанию адекватный опрос объектов

здравствуйте! пишу игрушку-стрелялку с видом сверху. очень интересует ваш опыт.

при инициализации "раунда" в классе Game (создается новый экземпляр при каждом новом раунде) заполняется массив obj со ссылками на собственно человечков, снаряды и т.д. то есть перед началом раунда имеется массив:

Код AS3:
obj[0] = [ object Guy ];
obj[1] = [ object Guy ];
и т.д.
также есть вспомогательный массив 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.
Старый 15.03.2012, 21:47
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 2  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
не трать зря время, используй box2d

Старый 15.03.2012, 22:09
Monade 2 вне форума Посмотреть профиль Отправить личное сообщение для Monade 2 Найти все сообщения от Monade 2
  № 3  
Ответить с цитированием
Monade 2
 
Аватар для Monade 2

Регистрация: Apr 2011
Сообщений: 38
Цитата:
Сообщение от anmelegov Посмотреть сообщение
не трать зря время, используй box2d
ну, это не по-джедайски

Старый 15.03.2012, 22:11
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 4  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
Цитата:
Сообщение от Monade 2 Посмотреть сообщение
ну, это не по-джедайски
зато работает быстро... не знаю какой у вас уровень, но я например точно уверен что я не смогу сделать так же

Старый 15.03.2012, 23:31
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
ну или хотя бы покопайтесь в его исходниках.
__________________
Отряд Котовскага

Старый 16.03.2012, 01:28
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 6  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Так а что именно тормозит?
Навскидку - нет широкой фазы. Это правда может ускорить. Возможно, поможет замена массива на список и/или не использовать вообще удаление из массива через slice (только помечать).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 16.03.2012, 13:10
Monade 2 вне форума Посмотреть профиль Отправить личное сообщение для Monade 2 Найти все сообщения от Monade 2
  № 7  
Ответить с цитированием
Monade 2
 
Аватар для Monade 2

Регистрация: Apr 2011
Сообщений: 38
Цитата:
Сообщение от Котяра Посмотреть сообщение
ну или хотя бы покопайтесь в его исходниках.
как вариант, пороюсь.

Цитата:
Сообщение от -De- Посмотреть сообщение
Так а что именно тормозит?
тормозит игра (FPS падают), если больше тридцати криттеров. конечно, можно от этого уйти и не спавнить всех сразу, то есть слегка поменять игровой процесс.

Цитата:
Сообщение от -De- Посмотреть сообщение
Навскидку - нет широкой фазы.
просто проблема в том, что нужно не только определять столкновения, но и менять "разрешенное перемещение", например, главный герой двигается со скоростью 2 пикселя за итерацию вправо, а рядом стоит препятствие. на расстоянии в 1 пиксель. сейчас реализовано так, что "разрешенное перемещение" будет равно как раз 1 пикселю - с одной стороны, герой сдвинется, с другой - не слипнется. можно конечно от этого тоже уйти и сделать всё в лоб ("можно идти"/"нельзя идти"), но тогда скорее всего будут проблемы с диагональными перемещениями, например, нажаты клавиши вправо и вверх. существующая система разрешит движение на 1 пиксель вправо , а вверх - по нормальной скорости, а в следующей итерации - только вверх. а если делать в лоб, двинуться нельзя будет никуда. про широкую фазу почитаю, спасибо

Старый 16.03.2012, 16:02
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Вопрос "что тормозит" был к тому, что собсно править надо именно то, что тормозит. Если вся игра, то всю игру)
Надо определить, что же конкретнее начинает жрать много. Ну в общем на геймдеве там в терминах в разделе физика даны основные понятия о том, как физ. двиги работают, читайте)
Возможно даже тяжелой артиллерии не надо, только завести собсно AABB и проверку по ним и если было просчитано взамиодействие 1 с 2, то не проверять, как у вас делается, взаимодействие 2 с 1.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 16.03.2012, 17:42
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 9  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
да если бы ты использовал box2d, то мог бы протестить без графики на отладочной отрисовке, а так даже не знаю что тебе посоветовать =)

Старый 17.03.2012, 18:10
Monade 2 вне форума Посмотреть профиль Отправить личное сообщение для Monade 2 Найти все сообщения от Monade 2
  № 10  
Ответить с цитированием
Monade 2
 
Аватар для Monade 2

Регистрация: Apr 2011
Сообщений: 38
Цитата:
Сообщение от anmelegov Посмотреть сообщение
да если бы ты использовал box2d, то мог бы протестить без графики на отладочной отрисовке, а так даже не знаю что тебе посоветовать =)
а я так и тестирую. графики пока тупо нет

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:25.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.