public class GameEnter extends MovieClip
{
public function GameEnter()
{
addEventListener(MouseEvent.MOUSE_DOWN, shootBullet);
}
public var _bullet1:bullet = new bullet;
public var angleRadian = Math.atan2(mouseY - 300,mouseX - 300);
public var angleDegree = angleRadian * 180 / Math.PI;
public function shootBullet(evt:MouseEvent)
{
_bullet1.x = 300;
_bullet1.y = 300;
_bullet1.angleRadian = Math.atan2(mouseY - 300,mouseX -300);
_bullet1.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
addChild(_bullet1);
}
public var speed1:int = 10;
public function bulletEnterFrame(evt:Event)
{
_bullet1.x += Math.cos(_bullet1.angleRadian) * speed1;
_bullet1.y += Math.sin(_bullet1.angleRadian) * speed1;
_bullet1.rotation = _bullet1.angleRadian*180/Math.PI;
checkHit();
if (_bullet1.x < 0 || _bullet1.x > 600 || _bullet1.y < 0 || _bullet1.y > 600)
{
removeChild(_bullet1);
_bullet1.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
}
}
public function checkHit()
{
if(_bullet.hitTestObject(enemy))
{
trace("Enemy hit");
}
}
}
} 基本上会发生什么,它打印出“敌人打击”约10次。我想知道:我怎么能只追踪“敌人打击”一次? 我认为问题在于,对于敌人的子弹每一帧,都会将其打印出来,我该如何修复它只能打印一次呢?
我最终会取代“追踪(”敌人打击“);”有功能的东西。
答案 0 :(得分:0)
在每一帧都调用checkHit(),只有当它在游戏区域之外时才会删除子弹?这意味着checkHit()为true的每一帧都会跟踪“敌人命中”。一旦发生命中,你应该删除事件监听器,就像子弹离开屏幕一样。