我正在制作一个游戏,屏幕上方的昆虫向下移动到底部。对象是玩家用他/她的鼠标杀死这些昆虫。当被杀死时,昆虫应该显示一个杀戮框架,我已经放入。杀死框架将在那里停留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);
}
我遇到的问题是,无论何时我点击昆虫,他们都会留在那里。我点击另一个它停留在那里。然后是另一个,然后过了一会儿他们消失了,分数增加了。有时死亡框架不会出现,一旦我触摸它们就会死亡。你能告诉我怎么解决这个问题吗?
答案 0 :(得分:0)
你必须重新分配加入敌人类别的分数,并为特定的压扁敌人而不是基类分配超时。最好的地方是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侦听器中,因此每帧将调用一次。此外,在此处组合拼接和移动消除了在其他地方放置移动代码的需要,无论如何都要遍历数组。