我将游戏作为毕业项目并遇到了一个小问题。游戏的目标是操纵船只并尽可能长时间避开小行星。我差不多完成了,但我现在正试图解决碰撞检测问题。
我的问题是如何在循环变量中到达敌人,以便它可以检查与它的碰撞?这是代码:
package com.asgamer.basics1
{
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
public class Engine extends MovieClip
{
private var numStars:int = 80;
private static var enemyList:Array = new Array();
private var ourShip:Ship;
public function Engine() : void
{
ourShip = new Ship(stage);
ourShip.x = stage.stageWidth / 2;
ourShip.y = stage.stageHeight / 2;
stage.addChild(ourShip);
for (var i:int = 0; i < numStars; i++)
{
stage.addChildAt(new Star(stage), 1)
}
addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
stage.addEventListener(Event.ENTER_FRAME, krash);
}
private function krash(e:Event) : void
{
function krash(e:Event):void
{
if (enemy.hitTestObject(ourShip)==true)
{
stage.removeChild(ourShip);
stage.removeEventListener(Event.ENTER_FRAME, krash);
}
}
}
private function loop(e:Event) : void
{
if (Math.floor(Math.random() * 10) == 5)
{
var enemy:Asteroid = new Asteroid(stage);
enemy.addEventListener(Event.REMOVED_FROM_STAGE, removeEnemy, false, 0, true);
enemyList.push(enemy);
stage.addChild(enemy);
}
}
private function removeEnemy(e:Event)
{
enemyList.splice(enemyList.indexOf(e.currentTarget), 1);
}
}
}
正如你所看到的,我有一个叫做循环的敌人的功能,还有一个叫做krash的碰撞检测功能。但由于敌人是一个变量内循环,我如何在krash函数中检查它与它的碰撞。 (对动作脚本的新内容,所以我不太了解术语)
答案 0 :(得分:0)
在krash中,您需要检查enemy
中的每个enemyList
。
例如:
private function krash(e:Event) : void
{
function krash(e:Event):void
{
for(var i:int = 0; i < enemyList.length; i++)
{
if (enemyList[i].hitTestObject(ourShip)==true)
{
stage.removeChild(ourShip);
stage.removeEventListener(Event.ENTER_FRAME, krash);
}
}
}
}
不幸的是,如果你在舞台上有很多敌人,那么程序会有所滞后,因为你每帧都要检查所有敌人的碰撞。
此外,我建议你添加一些东西来从屏幕上删除你的敌人:P
private function removeEnemy(e:Event)
{
enemyList.splice(enemyList.indexOf(e.currentTarget), 1);
stage.removeChild(enemyList.indexOf(e.currentTarget));
}
希望这会有所帮助。