AS3补间对象无法使用.hitTestObject()

时间:2015-12-30 00:15:10

标签: actionscript-3 debugging actionscript collision-detection

我在新的浏览器应用中遇到了一个主要问题。

好吧所以我制作了游戏,其中不同的立方体(正方形)在屏幕顶部产生,我使用Tween类让它们沿着屏幕下移然后消失。

但是我想在立方体击中玩家时发现碰撞(也就是飞行立方体)。

我尝试了一切,真正的一切,但似乎没有用。问题在于,当我删除“Tween”函数时,它确实检测到与hitTestObject方法的冲突,但是当我添加“Tween”时,将不再检测到线条冲突。

看起来像这样:

       function enemiesTimer (e:TimerEvent):void
  {
      newEnemy = new Enemy1();
      layer2.addChild(newEnemy);
      newEnemy.x = Math.random() * 700;
      newEnemy.y = 10;

      if (enemiesThere == 0)
      {
          enemiesThere = true;
          player.addEventListener(Event.ENTER_FRAME, collisionDetection)
      }



      var Tween1:Tween = new Tween(newEnemy, "y", null, newEnemy.y, newEnemy.y+distance, movingTime, true);
  }

碰撞检测部分:

private function collisionDetection (e:Event):void
  {


      if (player.hitTestObject(newEnemy))
      {
          trace("aaa");
      }






  }

我非常渴望得到关于这个主题的一些信息/帮助,它已经困扰了我好几天。

感谢您的时间,如果有人能帮助我,我会很高兴^^

2 个答案:

答案 0 :(得分:1)

首先,确保“newEnemy”实例和“player”实例位于同一个容器中。如果不是,他们的坐标系可能不匹配,可能是您问题的根源。

否则,您需要保留对您创建的每个敌人实例的引用。看起来你只是在检查一个“newEnemy”变量,每次你创建一个新敌人时都会被覆盖。这可能就是为什么你可以成功检测到玩家和最近的“敌人”实例之间的冲突。

所以......你需要一个敌人列表,你可以使用一个阵列。

private var enemyList:Array = [];

每次创建敌人时,将其推送到数组。

enemyList.push(newEnemy);

在你的“collisionDetection”功能中,你需要遍历所有敌人并检查玩家是否正在接触其中任何一个。

for(var i:int = 0; i < enemyList.length; i++)
{
    var enemy = enemies[i];
    if (player.hitTestObject(enemy))
    {
        trace("Collision Detected!");
        enemy.parent.removeChild(enemy); // remove the enemy from the stage
        enemies.splice(i, 1); // remove the enemy from the list
    }
}

答案 1 :(得分:0)

我建议您转移到TweenMax,它可能会解决您的问题,根据我的经验,它会以各种可能的方式更好。

向下滚动以下页面以查看此库的一些变体,我自己使用TweenNano,它们完全免费: https://greensock.com/gsap-as

我认为一些插件需要花钱,但我怀疑你是否需要它们。