我在新的浏览器应用中遇到了一个主要问题。
好吧所以我制作了游戏,其中不同的立方体(正方形)在屏幕顶部产生,我使用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");
}
}
我非常渴望得到关于这个主题的一些信息/帮助,它已经困扰了我好几天。
感谢您的时间,如果有人能帮助我,我会很高兴^^
答案 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
我认为一些插件需要花钱,但我怀疑你是否需要它们。