从AS2到AS3的游戏转换

时间:2012-11-22 11:09:16

标签: actionscript-3 actionscript-2

我有一个非常简单的射手的例子。但它在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. 怎么做才会有很多子弹,如上例所示?

2 个答案:

答案 0 :(得分: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);

请注意,AS3中没有depth 你可以使用addChildAt()来解决这个问题。

答案 1 :(得分:1)

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

我补充说:

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

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

程序正在正常运行。