![]() |
|
||||||||||
|
|||||
|
2Tails, давали уже.
http://noregret.org/tutor/n/collision/
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
видимо было много объектов в зоне видимости
![]()
__________________
low + |
|
|||||
|
Если делать клипами, то банально, чтобы даже узнать находиться ли обьект в "зоне видимости" придёться сравнивать его x y, юзать циклы - а это затраты ресурсов системы.
Можно конечно всё запихать в один контенер, и сравнивать с ним персонажа хит тестом maxX maxY, но такой вариант тож не очень (почемуто так хит тест реагирует с небольшой задержкой). В случае с сеткой размер левала ничем неограничен и никаких циклов. Что значит "зона видимости" ? окошко видимости зоны из флеш плеера (550х400) ? Открою вам секрет, если объект находиться за этой зоной видимости, где нить за экраном, флеш плеер автоматически его не прорисовывает. Тоесть независимо от того какой у обьекта будет _visible, за экраном флеш его небудет рисовать и следовательно тратить ЦП. Игры с большими уровнями виснут из-за циклов - постоянно пробегающих по этим обьектам.
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 24.08.2010 в 00:36. |
|
|||||
|
Tails, такая проблемка есть... Используя сетку проходят все те же самые сравнения точно так же, как будто бы её не было - только количество объектов там резко сокращается...
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Цитата:
До тех пор, пока объект находится в дисплей-листе, он проверяется на вхождение в видимую область, проверяется на visible и только потом рендерится. То есть, если у Вас много объектов вне дисплей-листа - это ничего, а вот если много объектов но с visible = false или вне зоны видимости - это все-равно нагрузка на проц. Так что наиболее оптимальный путь - это делать addChild и removeChild, снижая таким образом число проверок и нагрузку на CPU. Кстати, если интересно - вот пара ссылок 1) некоторые тонкости 2) некоторые оптимизации
__________________
...вселенская грусть |
|
|||||
|
Psycho Tiger
Я имею ввиду нечто вроде: massData[][] - 2х масив (сетка) Player[x][y] - положение в ячейки масива Столкновение сравниваем типо: Player.hitTest(massData[Player[x+1][y]]) Это образно ![]() Вообще саму ячейку можно разбить ещё на несколько более мелких ячеек, или внести максимально возможное количество обьектов в ячейке. Теоритически, такой вариант позволит делать неограниченные по размерам зоны. gloomyBrain спасибо ![]()
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 24.08.2010 в 01:01. |
|
|||||
|
И так на 8 смежных клеток - уже цикл на 8 итераций.
Только хиттестом сравнивать - это только для прямоугольников. В ячейке могут быть объекты разной формы. Поэтому сетка просто "обрезает" зону поисков на препятствия.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Необязательно. Можно например хранить список объектов, расстояние до которых меньше определенного значения и обновлять этот список когда игрок переместится на какое-нибудь расстояние от текущей точки.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Цитата:
__________________
...вселенская грусть |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:51. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| AS3 , flash , Игры на flash , оптимизация |
|
|