2014-02-07 89 views
0

我目前正在與椋鳥搏鬥。我剛剛創建了一個名爲「Star」的簡單類,它繼承自starling.display.Sprite。在這個類中的「onAddedToStage」功能,我有以下代碼:Starling:雪碧不能縮放

img = new Image(Assets.getTextureAtlas(Assets.ATLAS_MENU).getTexture("star_full.png")); 
img.height = 171; 
img.width = 179; 
img.x = -img.width/2; 
img.y = -img.height/2; 
addChild(img); 

不幸的是,在另一大類下面的代碼並未真正發揮作用:

var star:ObjectStar = new ObjectStar(starsCount == totalStars); 
star.x = 286; 
star.y = 161; 
star.width = 73; 
star.height = 70; 
addChild(star); 

的對象是在合適的繪製位置,但寬度和高度仍然是171和179,而不是我想要的73和70。 這是一個八哥相關的問題,還是我真的很愚蠢?

回答

0

我不熟悉Starling,但我相信你所看到的是Flash中的正常行爲。如果您有一個Sprite,它有一個100x100的紅色框,並將其放入另一個Sprite,並將父Sprite的寬度設置爲200x200,則紅色框仍將繪製爲100x100像素。我感覺以前版本的閃存在使用AS2時表現出不同的行爲(即您期望的方式),但在使用AS3時卻不行。

無論如何...解決您的問題的一種方法是覆蓋ObjectStar類中的寬度和高度設置器,就像這樣;

override public function set width(value:Number):void 
{ 
    img.width = value; 
    super.width = value; 
} 


override public function set height(value:Number):void 
{ 
    img.height = value; 
    super.height = value; 
} 

所以,這樣一來,當你設置ObjectStar的寬度和高度,你明確地設定了IMG的寬度和高度爲好。

(很顯然,你需要一個參考保持到您所創建的「IMG」)

+0

現在我覺得有點愚蠢:d 最簡單的方法就是把的addChild(星)星號之前。 width = ... 因爲我在實例化對象時添加圖像,所以在做這件事之前我無法對它進行縮放。另一種方法是使用scaleX和scaleY屬性,這些工作。 – Taxel