2012-11-22 128 views
1

我有一个非常简单的射手的例子。但它在AS2上。这里的来源:从AS2到AS3的游戏转换

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

您可能想要阅读: http://stackoverflow.com/questions/10737096/migrating-from-as2-to-as3/10738377 –

回答

1

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

我加了这一点:

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

而且改变了一切“子弹头”下面的“bullet1”。

程序正在正确工作。

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()来欺骗。