2010-05-11 84 views
0

我是新來的閃光燈,一直在寫一個帶有兩個擴展MovieClip(Stems and Star)的類的程序。從一個班級內添加孩子到場景

當用戶停止拖動Star對象,但不知道如何從Star類的代碼中引用場景時,我需要創建一個新的Stems對象作爲場景的子節點。

我已經試過路過現場成明星的構造和做sometihng像:

this.scene.addChild (new Stems()); 

但很顯然,這不是該怎麼辦呢?下面是莖和星光的代碼,任何建議將不勝感激。

package { 
import flash.display.MovieClip; 
import flash.events.*; 
import flash.utils.Timer; 


public class Stems extends MovieClip { 
    public const centreX=1026/2; 
    public const centreY=600/2; 
    public var isFlowing:Boolean; 
    public var flowerType:Number; 
    public const outerLimit=210; 
    public const innerLimit=100; 

    public function Stems(fType:Number) { 
     this.isFlowing=false; 
     this.scaleX=this.scaleY= .0007* distanceFromCentre(this.x, this.y); 
     this.setXY(); 
     trace(distanceFromCentre(this.x, this.y)); 
     if (fType==2) { 
      gotoAndStop("Aplant"); 
     } 

    } 

    public function distanceFromCentre(X:Number, Y:Number):int { 
     return (Math.sqrt((X-centreX)*(X-centreX)+(Y-centreY)*(Y-centreY))); 
    } 

    public function rotateAwayFromCentre():void { 
     var theX:int=centreX-this.x; 
     var theY:int = (centreY - this.y) * -1; 
     var angle = Math.atan(theY/theX)/(Math.PI/180); 
     if (theX<0) { 
      angle+=180; 
     } 
     if (theX>=0&&theY<0) { 
      angle+=360; 
     } 
     this.rotation = ((angle*-1) + 90)+180; 

    } 

    public function setXY() { 
     do { 
      var tempX=Math.random()*centreX*2; 
      var tempY=Math.random()*centreY*2; 
     } while (distanceFromCentre (tempX, tempY)>this.outerLimit || 
       distanceFromCentre (tempX, tempY)<this.innerLimit); 
     this.x=tempX; 
     this.y=tempY; 
     rotateAwayFromCentre(); 
    } 

    public function getFlowerType():Number { 
     return this.flowerType; 
    } 
} 

}

包{ 進口的flash.display.MovieClip; import flash.events。*; import flash.utils.Timer;

public class Star extends MovieClip { 
    public const sWide=1026; 
    public const sTall=600; 
    public var startingX:Number; 
    public var startingY:Number; 
    public var starColor:Number; 
    public var flicker:Timer; 
    public var canUpdatePos:Boolean=true; 
    public const innerLimit=280; 

    public function Star(color:Number, basefl:Number, factorial:Number) { 
     this.setXY(); 
     this.starColor=color; 
     this.flicker = new Timer (basefl + factorial * (Math.ceil(100* Math.random()))); 
     this.flicker.addEventListener(TimerEvent.TIMER, this.tick); 

     this.addEventListener(MouseEvent.MOUSE_OVER, this.hover); 
     this.addEventListener(MouseEvent.MOUSE_UP, this.drop); 
     this.addEventListener(MouseEvent.MOUSE_DOWN, this.drag); 

     this.addChild (new Stems (2)); 

     this.flicker.start(); 
     this.updateAnimation(0, false); 
    } 

    public function distanceOK(X:Number, Y:Number):Boolean { 
     if (Math.sqrt((X-(sWide/2))*(X-(sWide/2))+(Y-(sTall/2))*(Y-(sTall/2)))>innerLimit) { 
      return true; 
     } else { 
      return false; 

     } 
    } 

    public function setXY() { 
     do { 
      var tempX=this.x=Math.random()*sWide; 
      var tempY=this.y=Math.random()*sTall; 
     } while (distanceOK (tempX, tempY)==false); 
     this.startingX=tempX; 
     this.startingY=tempY; 
    } 

    public function tick(event:TimerEvent) { 
     if (this.canUpdatePos) { 
      this.setXY(); 
     } 
     this.updateAnimation(0, false); 
     this.updateAnimation(this.starColor, false); 
    } 

    public function updateAnimation(color:Number, bright:Boolean) { 

     var brightStr:String; 

     if (bright) { 
      brightStr="bright"; 
     } else { 
      brightStr="low"; 

     } 
     switch (color) { 
      case 0 : 
       this.gotoAndStop("none"); 
       break; 
      case 1 : 
       this.gotoAndStop("N" + brightStr); 
       break; 
      case 2 : 
       this.gotoAndStop("A" + brightStr); 
       break; 
      case 3 : 
       this.gotoAndStop("F" + brightStr); 
       break; 
      case 4 : 
       this.gotoAndStop("E" + brightStr); 
       break; 
      case 5 : 
       this.gotoAndStop("S" + brightStr); 
       break; 
     } 
    } 

    public function hover(event:MouseEvent):void { 
     this.updateAnimation(this.starColor, true); 
     this.canUpdatePos=false; 
    } 

    public function drop(event:MouseEvent):void { 
     this.stopDrag(); 
     this.x=this.startingX; 
     this.y=this.startingY; 
     this.updateAnimation(0, false); 
     this.canUpdatePos=true; 



    } 

    public function drag(event:MouseEvent):void { 
     this.startDrag(false); 
     this.canUpdatePos=false; 

    } 

} 

}

回答

1

,最快的方式是使用它引用的DisplayObject父父變量。

var stem:Stems = new Stems(2); 
stem.x = x; //optional: set stem coordinates to that of Star 
stem.y = y; 
parent.addChild(stem); 

如果你想添加的每個明星拖動動作停止,你需要把上面的代碼你下降函數內部時間莖對象到舞臺上。