2011-03-08 64 views
2

有沒有辦法阻止DisplayObject的height屬性的自動更改?它會自動調整大小以匹配內容,儘管我的swf文件高度爲32像素。下面的代碼可以證明這一點,第一幀enemy.height是32但後來是27.5,這就弄亂了我的腳本。防止DisplayObject的高度變化

getRect()和getBounds()返回完全相同。另外,我想知道爲什麼在第一幀中它顯示正確的高度,在第二幀中它改變了,它應該從一開始就顯示27.5。

package { 
    import flash.display.Sprite; 
    import flash.events.Event; 
    public class Main extends Sprite { 
     private var enemy:Sprite; 
     [Embed(source = '../lib/enemy.swf')] private var swf:Class; 
     public function Main():void { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function update(e:Event):void { 
      trace(enemy.height); 
     } 

     private function init(e:Event = null):void { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
      enemy = new swf(); 
      addChild(enemy); 
      addEventListener(Event.ENTER_FRAME, update); 
     } 

    } 

} 

回答

2

A「哈克」的解決方案可能是一個形狀添加到您想要的最大尺寸的敵人,然後將其設置爲不可見。我以這種方式爲對象創建了打包框,並且工作得非常好。

一種方法是在Flash IDE中創建對象時添加它。只需繪製它並將其定位爲您想要的形狀,然後爲其指定一個實例名稱,如「sizeHolder」。創建敵人後,你會再調用

enemy.sizeHolder.visible = false; 

在Flash IDE中,你可以將其放置在另一個時間線,然後使該時間表無形的鎖,所以在編輯時,實際它不會讓你的方式目的。

另一種方法是通過代碼添加它。在另一個DisplayObject中繪製該對象,將其設置爲不可見,然後將其添加到敵人。

+0

是的,這些解決方案是可行的,但我們仍然很奇怪ActionScript開發人員無法阻止這種默認行爲。現在我正在收聽ADDED_TO_STAGE,存儲高度,並根據存儲的高度進行進一步的計算,而不是實際的高度。 – Veehmot

+0

您使用AS越多,您注意到像MovieClip這樣的一體化課程就越不以創建程序員爲目標,而更多地是Flash純動畫時代的遺留問題。 –

+1

我甚至不會稱之爲「哈克」,這是通常的做法,以保持大小。 – alxx

0

嘗試

import flash.display.StageAlign; 
import flash.display.StageScaleMode; 

stage.align = StageAlign.TOP_LEFT; 
stage.scaleMode = StageScaleMode.NO_SCALE; 
+0

不,這並不能解決問題。我不會改變窗戶的大小或類似的東西。 – Veehmot

4

這與您正在實例化整個SWF的事實有關,並且1幀必須通過才能將其同步到Main swf。我會做的是出口符號的.fla文件,然後使用「嵌入符號」語法軟硬度:

[Embed(source='enemy.swf#Symbol1')] 
private var swf:Class; 

在這種情況下,其高度將是一致的,即使在第一ENTER_FRAME。如果它不是您想要的高度,您可以使用不可見的形狀來設置邊界。

1

敵人精靈動畫序列 的高度會有所不同。這是 動畫過程的一部分。因此,根據精靈的邊界框,每幀的實際高度 將會變化。 正如你很好地觀察到這是 默認的行爲。

的方式:

  • 一個你目前以下收納高度和使用計算(更好)
  • 作爲EyeSeeEm建議,如果我理解他正確地具有一種無形的高度精靈背景與適當的以影片剪輯中心點爲中心並將每個幀中的精靈居中以包含在不可見的高度精靈邊界中。

你會經常發現你會遇到行動腳本中的特性,而不是你想要的方式工作。重要的是你適應編碼以促進解決方案。當編碼/方法允許輕鬆進行進一步的更改/擴展時,它不是黑客或低效的。

PS:

這將取決於情況,但個人根據精靈動畫實例,以便任何命中敵人只是幾乎在它的頭上拋體實際上不殺死敵人我寧願高度是動態。