2013-03-28 33 views
1

我在班上很新。下面是一個嘗試創建一個StageObject類,我可以設置寬度,高度,xy和背景顏色。班 - 新手上課「這個。」

package 
    { 
     import flash.display.MovieClip; 



public class StageObjects extends MovieClip 
    { 


     public function StageObjects() 
     { 
      // constructor code 
     } 
     public function setUpStageObject(w:int, h:int, X:int, Y:int, color:Number):void 
     { 
      this.width = w; 
      this.height = h; 
      this.x = X; 
      this.y = Y; 

      this.cacheAsBitmap = true; 
      this.graphics.beginFill(color,1); 
      this.graphics.drawRect(0,0,w,h); 
      this.graphics.endFill(); 
      this.opaqueBackground = color; 
      trace("parameters: " + w + " - " + h + " - " + X + " - " + Y + " - " + color); 


     } 

     /*~~~ adjust position and scale functions ~~~*/ 
     public function adjustXY(ch:Object, par:Object):void 
     { 
      var w = par.width; 
      var h = par.height; 

      ch.x = par.x + (w - ch.width)/2; 
      ch.y = par.y + (h - ch.height)/2; 
     } 

     public function adjustWH(ch:Object, par:Object):void 
     { 
      var w = par.width; 
      var h = par.height; 

     } 

    } 

} 

在主時間軸(閃存)我這樣做:

var titleBkg:StageObjects = new StageObjects(); 
titleBkg.setUpStageObject(imageBoxWidth, titleBkgHeight, -1, imageBoxHeight +1, 0x589199); 
this.addChild(titleBkg); 

但它不會顯示出來。我有沒有提到「這個」。錯誤?

+1

設置一個空的影片剪輯的寬度/高度沒有任何影響。你可以刪除'this.width = w; this.height = h;' –

+0

如何給剪輯內容? – artcase

+0

當然,如果你不需要任何一個動畫片段的功能,只需使用一個精靈。 –

回答

1

您沒有用addChild正確地創建和保存圖形。

有效你的舞臺看起來是這樣的:

Stage ¬ 
    0: MainTimeline:MovieClip ¬ 
     0: instance1:StageObjects 

,它需要像這樣:

Stage ¬ 
    0: MainTimeline:MovieClip ¬ 
     0: instance1:StageObjects ¬ 
      0: instance1:Shape 

您的圖形調用應該上的形狀被調用,而不是一個影片剪輯。您也可以在第一次呼叫時使用一行而不是兩次執行此設置。

package { 
    import flash.display.MovieClip; 

    public class StageObjects extends MovieClip { 
     public function StageObjects(w:int, h:int, X:int, Y:int, color:uint) { 
      // Constructor 
      this.x = X; 
      this.y = Y; 

      var rect:Shape = new Shape(); 
      rect.graphics.beginFill(color,1); 
      rect.graphics.drawRect(0,0,w,h); 
      rect.graphics.endFill(); 
      addChild(rect); 
      trace("parameters: " + w + " - " + h + " - " + X + " - " + Y + " - " + color); 
     } 


     public function adjustXY(ch:Object, par:Object):void { 
      // adjust position and scale functions 
      var w = par.width; 
      var h = par.height; 

      ch.x = par.x + (w - ch.width)/2; 
      ch.y = par.y + (h - ch.height)/2; 
     } 

     public function adjustWH(ch:Object, par:Object):void { 
      var w = par.width; 
      var h = par.height; 
     } 
    } 
} 

和創建對象將被簡化爲:

var titleBkg:StageObjects = new StageObjects(imageBoxWidth, titleBkgHeight, -1, imageBoxHeight +1, 0x589199); 
this.addChild(titleBkg); 
+0

謝謝!我想我開始得到這個......(提示不祥的音樂) – artcase

+0

好吧,如果我想創建另一個擴展StageObjects的類「SwapableObject」會怎麼樣。我可以這樣做:'var newswap:SwapableObject = new StageObjects(widthamount,heightamount,xlocation,ylocation,color);' – artcase

+0

你應該,雖然你可能需要在擴展類上調用super()(我不記得)。試一試。 :) – Atriace

-1

我想你已經在構造函數中聲明瞭寬度,高度,圖形等。在我的班級代碼中,我從來沒有使用過「這個」。如果將變量聲明爲類private/public編譯器將不允許您聲明具有相同名稱的其他變量。所以你不必使用'this',但是當你使用'this'時它更具可讀性。 (你會知道它是類變量)。
您是否將yor圖形添加到舞臺(不是titleBkg,而是您在titleBkg對象內創建的對象)? ;)

+0

我需要基於stageWidth/stageHeight值的圖形(Sprites aka StageObjects)可縮放,因此不能直接將它們添加到舞臺上。 – artcase

+0

你應該*總是使用'this'關鍵字。當查找對象的內存引用時,它會對範圍施加額外的限制。是的,您不必*使用關鍵字,但它會導致對象查找時間稍快。 –