嵌套碰撞椋鸟as3

时间:2013-04-06 10:37:19

标签: actionscript-3 collision intersect

我在项目中使用starling和tweenMax框架。 我遇到的麻烦是:

为了沿不同路径制作动画,我使用的是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);
        }
    }

现在我想使用_shooterHero检查其中每个_leaderEnemy和_shooterEnemy之间的starling是否存在冲突。

成功运行此数组会检查与整个组的冲突,即_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. 我可以在_shooterEnemy的课程中检查与_shooterHero的碰撞吗?
  2. 我试过了:

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

    虽然没有用。

    1. 我可以检查一个敌人与舞台上的所有东西的碰撞,这样我可以为每个联系人分配个别功能吗? 例如:用英雄击中:死;与另一个敌人交战:转身
    2. 如果您需要更多信息,我很乐意提供。

      谢谢。

2 个答案:

答案 0 :(得分:1)

  

我可以检查一个敌人与舞台上的所有东西的碰撞,这样我可以为每个联系人分配个别功能吗?例如:用英雄击中:死;与另一个敌人交战:转身

当然可以。你应该!这大约是碰撞引擎的工作原理。

  

成功运行此数组会检查与整个组的冲突,即_leaderEnemy,但不会检查其中的个别冲突。

不。它不会起作用。因为bounds属性使用父坐标。 这意味着您可以将每个子显示(相同容器)相互交叉。 但是,您不应该将A的子显示与B的子显示相交叉。

除非您将每个边界坐标(本地)转换为全局。

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

答案 1 :(得分:0)

使用Track.bounds.intersects是检查内爆的一种方法。另一种方法是使用starling.displayDisplayObject

的hi​​tTest方法

你还可以通过毕达哥拉斯定理类型计算来检查你的英雄和其他敌人的距离。

你是在互相检查敌人吗?如果你有很多敌人,你可能想要调查一下&#34; flocking&#34;算法。 Keith Petes在他的“高级动作脚本动画”一书中很好地介绍了这个主题。