2013-04-06 2 views
0

Я использую рамки скворца и tweenMax в моем проекте. Проблема, с которой я столкнулся, заключается в следующем:Вложенные столкновения скворец as3

Для анимации по различным дорожкам я использую tweenmax.

Существует одна _leaderEnemy, которая анимируется вдоль пути, и я нажимаю на нее несколько других _shooterEnemy (они одного класса).

public function createEnemies(enemyNo:int, path:Array, offset:int):void 
{ 
    for(var i:uint=1;i<=enemyNo;i++){ 
     if (i==1){ 
      _leaderCount++; 
      _leaderEnemy = new ShooterEnemy(); 
      _leaderEnemy.x=600; 
      _leaderEnemy.y=300; 
      _leaderEnemy.name="_shooterEnemy"+_leaderCount; 
      this.addChild(_leaderEnemy); 
      leaderEnemyArray.push(_leaderEnemy); 
     } 
     else 
     { 
      _leaderCount++; 
      _shooterEnemy= new ShooterEnemy(); 
      _shooterEnemy.x=0; 
      _shooterEnemy.y=(offset*(i-1)); 
      _shooterEnemy.name="_shooterEnemy"+_leaderCount; 
      trace("no: "+_shooterEnemy.name); 
      leaderEnemyArray.push(_shooterEnemy); 
      _leaderEnemy.addChild(_shooterEnemy); 
     } 
    } 

Теперь я хочу, чтобы проверить на столкновение с использованием скворец между каждым из _leaderEnemy и _shooterEnemy внутри него с _shooterHero.

Запуск этого массива успешно проверяет столкновение со всей группой, то есть _leaderEnemy, но не отдельные внутри.

Технически, я должен быть в состоянии сделать это просто:

var Track:Object; 
for(var i:uint=0;i<leaderEnemyArray.length;i++) { 
    Track=leaderEnemyArray[i];  
    if (Track.bounds.intersects(_shooterHero.bounds)){ 
     Track.rotation=deg2rad(70);    
    } 
} 

Это может быть что-то глупо, что я делаю. Но я не смог это решить.

Любая помощь по этому вопросу будет оценена по достоинству.

Некоторые другие вопросы у меня есть:

  1. Могу ли я проверить на столкновение с _shooterHero внутри класса в _shooterEnemy в?

Я попытался:

if (this.bounds.intersects(stage.getChildByName("_hero"))){ 
} 

хотя это не сработало.

  1. Могу ли я проверить наличие столкновения одного врага со всем на сцене, поэтому я могу назначить индивидуальные функции для каждого его контакта? Например: hit with hero: die; ударить другим врагом: развернуться

Если вам нужна дополнительная информация, я буду рад предоставить его.

Thank you.

+0

Попробуйте использовать 'для каждого ... в цикле. – David

ответ

0

Использование Track.bounds.intersects - один из способов проверки совпадений. Другим было бы использовать метод hitTest: starling.displayDisplayObject

Вы также можете проверить расстояние вашего героя и других противников, рассчитанное с помощью вычисления типа теории пифагорей.

Вы проверяете врагов друг против друга? Если у вас много врагов, вы можете захотеть взглянуть на «флокирующие» алгоритмы. Кит Питс прекрасно освещает эту тему в своей книге «Расширенная анимация ActionScript».

1

Могу ли я проверить наличие столкновения одного врага со всем на сцене, поэтому я могу назначить отдельные функции для каждого его контакта? Например: удар с героем: die; ударить другим врагом: развернуться

Конечно, вы можете. Вам следует! Это примерно так, как работают коллизионные двигатели.

Выполнение этого массива успешно проверяет столкновение со всей группой, то есть _leaderEnemy, но не отдельные внутри.

Nope. Это не сработает. Поскольку свойство bounds использует родительские координаты. Значение вы можете пересекать каждый дочерний дисплей (одного и того же контейнера) друг с другом. Но вы не должны пересекать дочерний дисплей A с дочерним отображением B.

За исключением того, что вы конвертируете все граничные координаты (локальные) в глобальные.

http://doc.starling-framework.org/core/starling/display/DisplayObject.html#localToGlobal()