2013-04-06 64 views
0

我在我的項目中使用starling和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. 我可以檢查一個敵人與舞臺上的任何事物的碰撞,因此我可以爲他的每個聯繫人分配單獨的功能嗎?例如:用英雄命中:死;擊中另一個敵人:轉身

如果您需要更多信息,我會很樂意提供。

謝謝。

+0

嘗試使用'for each ... in'循環。 – David 2013-04-07 15:10:31

回答

0

使用Track.bounds.intersects是檢查碰撞的一種方法。另一種方法是使用hitTest方法starling.displayDisplayObject

你也可以檢查你的英雄和其他敵人的距離,這是由畢達哥拉斯定理類型計算計算出來的。

你在互相檢查敵人嗎?如果你有很多敵人,你可能想要研究「植絨」算法。 Keith Petes在他的高級動作動畫書中很好地講述了這個主題。

1

我可以在舞臺上檢查一個敵人與一切物體的碰撞嗎,所以我可以爲他的每個聯繫人分配單獨的功能嗎?例如:用英雄命中:死;打另一個敵人:轉身

當然你可以。你應該!這近似地是碰撞引擎的工作原理。

運行此數組已成功檢查與整個組的衝突,即_leaderEnemy,但不是其中的單個組件。

都能跟得上。它不會工作。因爲bounds屬性使用父座標。 含義您可以將每個子顯示(相同的容器)相互交叉。 但是,您不應該與B的子顯示A交叉顯示兒童顯示。

除了將每個邊界座標(都是本地)轉換爲全局座標外。

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