2010-04-27 1 views
0

Я использую Adobe Flash CS4. Язык Action Script 3Как обрабатывать обнаружение столкновений с несколькими экземплярами одного мувиклипа?

В моей библиотеке у меня есть 2 пунктов:

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

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

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

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

Заранее благодарен!

+0

Является ли ваша игровая плитка базированной? – Mikushi

ответ

1

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

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

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

+0

Ваше первое решение не сработает, удар по тестированию на Sprite не на пиксель, а на ограничительную рамку, чтобы вы попали в тестовое тестирование на ящике, где максимальная граница содержит все субролики. Поэтому он почти всегда будет возвращать истину. Тем не менее, вы можете растрировать мувиклип в растровое изображение, а затем изучить альфа-значения пикселей относительно координаты плеера. – Allan

+1

Существуют следующие варианты: http://www.tink.ws/blog/as-30-hittest/ – ktdrv

0

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^