Serhiy
Serhiy

Reputation: 43

Game conversion from AS2 to AS3

I have an example of very simple shooter. But it on AS2. Here the source:

 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;
};
  };

I want to do the same, but in as3.

I tried to convert. Here is what I have: PS - I'm newbie, please, don't get angry of the code below :)

     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. bullet appears, but only once, and did not move on the right path.
  2. how to do that would be a lot of bullets, as in the example above?

Upvotes: 1

Views: 362

Answers (2)

Serhiy
Serhiy

Reputation: 43

Thanks for the fast replying. I solve the problem this way:

I added this:

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

And changed all "bullet" below on "bullet1".

Program is working now correctly.

Upvotes: 1

Florent
Florent

Reputation: 12420

attachMovie() is not the same as addChild().

  • MovieClip.attachMovie() creates a new symbol and add it to the MovieClip
  • DisplayObjectContainer.addChild() adds the specified DisplayObject to the container

Instead of calling (in AS2):

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

You should use something like this (in AS3):

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

Please note that there is no depth in AS3.
You could trick this by using addChildAt().

Upvotes: 1

Related Questions