Как обрабатывать обнаружение столкновений с несколькими экземплярами одного фрагмента ролика? - PullRequest
0 голосов
/ 27 апреля 2010

Я использую Adobe Flash CS4. Язык Action Script 3

В моей библиотеке 2 предмета:

  • игрок
  • стена

объект игрока уже функционирует правильно, перемещая его. Теперь, когда я помещаю на сцену несколько объектов стены (wall = 32x32 px), я хочу, чтобы игрок не двигался, когда он входит в стену.

Я попытался присвоить всем стенам одно и то же имя экземпляра и просто проверить, нет ли столкновения с этим объектом, но когда я это делаю, столкновение работает только для 1 из стен.

Я мог бы дать всем экземплярам стены другой сценарий столкновения, но это отнимает много времени, есть ли другой способ глобально определить стену как сплошную для игрока?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

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

Или вы можете просмотреть все экземпляры стены и проверить отдельно. Может показаться вам расточительным, но таким образом вы можете добавить некоторые оптимизации в вашу процедуру обнаружения столкновений. Например, зачем проверять столкновение с левой стеной, если игрок находится в правой части экрана.

Или вы можете использовать математику, чтобы проверять наличие коллизий и избегать встроенной процедуры Flash. Это может звучать как еще большая работа, но, видя, насколько она некорректна (ограничена частотой кадров и т. Д.), Я бы пошел по этому пути - если бы динамика игры позволяла, конечно.

0 голосов
/ 28 апреля 2010

Помните, что любой мувиклип является экземпляром класса MovieClip. Дав всем экземплярам одинаковое имя, вы эффективно делаете это:

var myClip:MovieClip = new MovieClip();
myClip = new MovieClip();

myClip <-- will always refer to the later movieclip since thats what it is now referenced to.

Чтобы решить вашу проблему, вы, скорее всего, создадите класс, содержащий коллекцию (скорее всего, массив). Вы добавите ссылку на каждый мувиклип в этот массив (просто нажав мувиклипы). Тогда у вас будет функция, которая вызывается либо в каждом кадре, либо каждый раз, когда персонаж перемещается, проходя через этот массив, проверяя, попала ли стена в игрока и возвращает ли она true, если это произошло, или false, если этого не произошло. 1004 *

...