基本上发生的事情是当我射击子弹时,它会制造子弹。但是,如果我再次点击子弹仍然在屏幕上,它会移除子弹并制作一个全新的子弹。所以现在屏幕上一次只能有一颗子弹。我该如何解决? 库中的项目符号的实例名称为“bullet”
package
{
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 var speed1:int = 10;
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 function bulletEnterFrame(evt:Event)
{
var _bullet1 = evt.currentTarget;
_bullet1.x += Math.cos(_bullet1.angleRadian) * speed1;
_bullet1.y += Math.sin(_bullet1.angleRadian) * speed1;
_bullet1.rotation = _bullet1.angleRadian*180/Math.PI;
if (_bullet1.x < 0 || _bullet1.x > 600 || _bullet1.y < 0 || _bullet1.y > 600)
{
removeChild(_bullet1);
_bullet1.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
}
}
}
}
答案 0 :(得分:2)
好好想想,你将_bullet1变量存储在类中,这很好,但每次你拍摄时你都使用相同的变量,只需再次改变x和y位置。
更好的方法是在子弹类本身处理子弹的动画。
拍摄时,您只需创建一个新的子弹并将其添加到舞台上。
如果您仍想使用这种方式,它应该更像是这样:
public function shootBullet(evt:MouseEvent)
{
var bullet:bullet = new bullet();
bullet.x = 300;
bullet.y = 300;
bullet.angleRadian = Math.atan2(mouseY - 300,mouseX -300);
bullet.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
addChild(bullet);
}
public function bulletEnterFrame(evt:Event)
{
var tmpBullet:bullet = evt.currentTarget as bullet;
tmpBullet.x += Math.cos(_bullet1.angleRadian) * speed1;
tmpBullet.y += Math.sin(_bullet1.angleRadian) * speed1;
tmpBullet.rotation = _bullet1.angleRadian*180/Math.PI;
if (tmpBullet.x < 0 || tmpBullet.x > 600 || tmpBullet.y < 0 || tmpBullet.y > 600)
{
removeChild(tmpBullet);
tmpBullet.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
}
}
但最好的方法是选择1