1

我有一个非常简单的射手的例子。但它在 AS2 上。这里的来源:

 speed = 4;
 depth = 0;
 nose = 50;

        _root.onMouseMove = function() {
        updateAfterEvent();
        xdiff = _root._xmouse-spaceShip._x;
        ydiff = _root._ymouse-spaceShip._y;
        angle = Math.atan2(ydiff, xdiff);
   angle = angle*180/Math.PI;
    spaceShip._rotation = angle;
};

_root.onMouseDown = function() {
angle = spaceShip._rotation;
angle = angle*Math.PI/180;
++depth;
name = "projectile"+depth;
_root.attachMovie("projectile", name, depth);

//projectile - it is bullet
_root[name]._x = spaceShip._x+nose*Math.cos(angle);
_root[name]._y = spaceShip._y+nose*Math.sin(angle);
_root[name].xmov = speed*Math.cos(angle);
_root[name].ymov = speed*Math.sin(angle);
_root[name].onEnterFrame = function() {
 this._x += this.xmov;
 this._y += this.ymov;
};
  };

我也想做同样的事情,但是在 as3 中。

我试图转换。这是我所拥有的: PS - 我是新手,请不要对下面的代码生气:)

     var nose=55;
     var angle;
     var acc=1;
  Mouse.hide();
  stage.addEventListener(MouseEvent.MOUSE_MOVE, cursor);
    function cursor(e:MouseEvent):void {
      cross.x=mouseX;
      cross.y=mouseY;
   }
      stage.addEventListener(Event.ENTER_FRAME, rotation2);
    function rotation2(event:Event):void {
  var xdiff=mouseX-spaceShip.x;
  var ydiff=mouseY-spaceShip.y;
 angle=Math.atan2(ydiff,xdiff);
 angle=angle*180/Math.PI;
   spaceShip.rotation=angle;
  }
   stage.addEventListener(MouseEvent.CLICK, shoot);
    function shoot(event:MouseEvent):void {

  angle = spaceShip.rotation;
  angle = angle*Math.PI/180;

bullet.x=spaceShip.x+nose*Math.cos(angle);
bullet.y=spaceShip.y+nose*Math.sin(angle);
  var xmov=acc*Math.cos(angle);
  var ymov=acc*Math.sin(angle);

 stage.addEventListener(Event.ENTER_FRAME, action);
  function action(event:Event):void {
bullet.x+=xmov;
bullet.y+=xmov;
  }
 }
  1. 子弹出现,但只有一次,并没有走上正轨。
  2. 如上例所示,如何做到这一点会有很多子弹?
4

2 回答 2

1

attachMovie()不一样addChild()

  • MovieClip.attachMovie()创建一个新符号并将其添加到MovieClip
  • DisplayObjectContainer.addChild()将指定的添加DisplayObject到容器中

而不是调用(在 AS2 中):

_root.attachMovie("projectile", name, depth);

你应该使用这样的东西(在 AS3 中):

var proj:DisplayObject = new projectile();
proj.name = "projectile" + depth;
stage.addChild(proj);

请注意,depthAS3 中没有。
您可以使用addChildAt().

于 2012-11-22T11:35:18.633 回答
1

感谢您的快速回复。我这样解决问题:

我添加了这个:

    var bullet1:Bullet = new Bullet ();
 addChild (bullet1);

并更改了“bullet1”下面的所有“bullet”。

程序现在工作正常。

于 2012-11-23T15:18:07.863 回答