我正在做一个游戏,昆虫从屏幕上方向下移动到底部。目标是让玩家用他/她的鼠标杀死这些昆虫。当杀死昆虫时,应该显示一个杀死框,这是我放进去的。杀死帧将在那里停留3秒,对象将被移除。这也会增加玩家的分数。
这段代码是在昆虫内部编写的:
function kill(event:MouseEvent):void
{
this.dead = true;
}这段代码是在背景电影剪辑框架内编写的。
function moveEnemies():void
{
var tempEnemy:MovieClip;
for (var i:int =enemies.length-1; i>=0; i--)
{
tempEnemy = enemies[i];
if (tempEnemy.dead)
{
tempEnemy.gotoAndStop(21);
var myTimer:Timer = new Timer(3000);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
myTimer.start();
}
}
}
function timerListener (e:TimerEvent):void
{
for (var i:int =enemies.length-1; i>=0; i--)
{
if (tempEnemy.dead)
{
score++;
roachLevel.score_txt.text = String(score);
removeEnemy(i);
}
}
}
function removeEnemy(id:int)
{
removeChild(enemies[id]);
enemies.splice(id,1);
}我遇到的问题是,每当我点击昆虫时,它们就会停留在那里。我点击了另一个,它停留在那里。然后是另一个,过了一段时间他们就消失了,分数增加了。有时死亡框架不会出现,我一触摸它们就会死亡。你能告诉我怎样才能解决这个问题吗?
发布于 2013-10-16 12:42:28
你必须重新定位添加到敌人职业的分数,并为特定的被压制的敌人分配一个超时,而不是基础职业。最好的地方是在kill()函数中。
function kill(e:MouseEvent):void {
this.dead=true;
gotoAndStop(21);
flash.utils.setTimeout(removeSelf,3000);
}
function removeSelf():void {
this.parent.removeChild(this);
}现在,调整评分和跟踪对象的机制。首先,如果一个对象变成了dead,你立即将它从敌人数组中移除(它会自己处理它的移除),并为它打分。其次,所有其他功能都应该保留下来。
for (var i:int=enemies.length-1;i>=0;i--) {
var tempEnemy=enemies[i];
if (tempEnemy.dead) {
score++;
enemies.splice(i,1);
} else {
tempEnemy.y++; // or other move function
}
}这个循环应该在enterframe侦听器中,所以每个帧都会调用一次。同样,在这里结合拼接和移动消除了将移动代码放在别处的需要,因为您无论如何都要迭代数组。
https://stackoverflow.com/questions/19395129
复制相似问题