2013-07-11 107 views
-2

我一直在努力尝试将我在AS2中创建的这个非常棒的代码转换为AS3,我知道它一定很简单,但我对AS3不太了解。请帮助AS2到AS3代码转换

reference = 240; 

MovieClip.prototype.asNewStar = function() 
{ 
    this.x = random(Stage.width)-Stage.width/2; 
    this.y = random(Stage.height)-Stage.height/2; 
    this.z = 1000; 

    this.onEnterFrame = function() 
    { 
     if ((this.z -= 20) < -100) this.removeMovieClip(); 
     else this.drawStar(); 
    } 
} 

MovieClip.prototype.drawStar = function() 
{ 
    this.clear(); 
    this.lineStyle(10-this.z/200, Math.random() * 0xFFFFFF, 100); 
    perspectiveRatio = reference/(reference + this.z); 
    this.moveTo(this.x*perspectiveRatio, this.y*perspectiveRatio); 
    perspectiveRatio = reference/(reference + this.z + 40); 
    this.lineTo(this.x*perspectiveRatio, this.y*perspectiveRatio); 
} 


this.createEmptyMovieClip("galaxy",1); 

galaxy._x = Stage.width/2; 
galaxy._y = Stage.height/2; 
galaxy.onEnterFrame = function() 
{ 
    this.createEmptyMovieClip("star"+ ++depth, depth).asNewStar(); 
} 
+3

您好!你显然是新的,所以没关系,但这不是为你转换代码的地方。请[阅读常见问题](http://stackoverflow.com/help/on-topic)了解您可以在本网站上询问的问题类型。 – Marty

回答

1
package 
{ 
import flash.display.DisplayObjectContainer; 
import flash.display.MovieClip; 
import flash.events.Event; 

public class Star extends MovieClip // or Sprite if not need MovieClip's features. 
{ 

    //------------ properties ------------// 

    //------------ constructor -----------// 

    public function Star() 
    { 
     super(); 
     addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 
     addEventListener(Event.ENTER_FRAME, enterFrameHandler); 
    } 

    //----- initialize/dispose ---------// 

    // in your code it was: 
    // createEmptyMovieClip("star"+ ++depth, depth).asNewStar(); 
    public static function createStarIn(container:DisplayObjectContainer):Star 
    { 
     return container.addChild(new Star()) as Star; 
    } 

    public function dispose():void 
    { 
     removeEventListener(Event.ENTER_FRAME, enterFrameHandler); 
     removeFromParent(false); 
    } 

    // in your code it was: 
    // removeMovieClip() 
    public function removeFromParent(dispose:Boolean = false):void 
    { 
     parent && (parent as DisplayObjectContainer).removeChild(this); 
     dispose && this.dispose(); 
    } 

    //--------------- ctrl ---------------// 

    private function drawStar():void 
    { 
     graphics.clear(); 
     graphics.lineStyle(10 - z/200, Math.random() * 0xFFFFFF, 100); 
     perspectiveRatio = reference/(reference + z); 
     graphics.moveTo(x * perspectiveRatio, y * perspectiveRatio); 
     perspectiveRatio = reference/(reference + z + 40); 
     graphics.lineTo(x * perspectiveRatio, y * perspectiveRatio); 
    } 

    //------------ accessors -------------// 

    //------- handlers/callbacks -------// 

    private function addedToStageHandler(e:Event):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler); 

     x = Math.random() * stage.stageWidth - stage.stageWidth/2; 
     y = Math.random() * stage.stageHeight - stage.stageHeight/2; 
     z = 1000; 
    } 

    private function enterFrameHandler(e:Event):void 
    { 
     if((z -= 20) < -100) 
      dispose(); 
     else 
      drawStar(); 
    } 
} 
}