2010-11-01 140 views
2

編輯#2我找到了解決方案,它比我想象的要簡單。謝謝你的時間。 =)(使用完整的解決方案回答了我自己的問題)AS3:調整精靈的大小而不調整其BitmapFill(或其內容)?

編輯:我的道歉,我的帖子是不夠透明..我會嘗試迭代一點更清晰。我不是簡單地試圖遏制的東西,並沒有內容調整大小的容器調整大小。我只是使用一個簡單的MovieClip .. 我的主要焦點是使用BitmapFill。我正在嘗試爲容器製作重複的背景圖像;到目前爲止,我可以將我的BitmapFill精靈繪製成我想要的大小。 (這是舞臺的高度),但是當舞臺重新調整大小時,我想重新調整容器的大小,但讓我的容器BitmapFill裁剪或添加更多,因爲窗口調整爲較大或較小。請允許我說明我的意思:

alt text

我希望這將清除任何疑惑,並與任何直答案幫助。

-------原帖:

我有一個簡單的矩形精靈與從庫位圖,當窗口已調整檢測一個簡單的調整大小處理函數罷了。

我想要做的是讓我的矩形調整到stage.stageHeight的高度,保持其位圖填充,但不調整位圖填充或精靈內的任何子節點。

從我讀過的內容來看,這是一個棘手的問題,因爲精靈的大小與它所包含的內容有關..或者類似的東西..我真的不知道更多..我看到一個例子當一個人伸出精靈類,但我不知道爲什麼或如何..

在我的圖書館

有一個稱爲「模式」的形象,我的代碼如下所示:

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

stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true); 

var bgData:pattern = new pattern(0,0); 
var bg:Sprite = new Sprite(); 

bg.graphics.beginBitmapFill(bgData, null, true, false); 
bg.graphics.drawRect(0, 0, 80, stage.stageHeight); 
bg.graphics.endFill(); 
addChild(bg); 

function resizeHandler(e:Event=null):void 
{ 
trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight); 
bg.height = stage.stageHeight; //simply makes the fill resize also 
} 

回答

2

哦,好吧,我很沉悶。答案很簡單。

所有我需要做的是明確的,則圖形重繪他們..

我不知道明確的();功能..

全面修改後的代碼如下:

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

stage.addEventListener(Event.RESIZE, resizeHandler, false, 0, true); 

var bgData:pattern = new pattern(0,0); 
var bg:Sprite = new Sprite(); 

bg.graphics.beginBitmapFill(bgData, null, true, false); 
bg.graphics.drawRect(0, 0, 80, stage.stageHeight); 
bg.graphics.endFill(); 
addChild(bg); 

function resizeHandler(e:Event=null):void 
{ 
trace("dimensions are: " + stage.stageWidth + " x " + stage.stageHeight); 
bg.graphics.clear(); 

bg.graphics.beginBitmapFill(bgData, null, true, false); 
bg.graphics.drawRect(0, 0, 80, stage.stageHeight); 

bg.graphics.endFill(); 
} 

感謝所有,對不起,這個潛在的空間浪費。

+0

+1進入這篇文章寫的完全一樣:) – www0z0k 2010-11-02 08:43:06

1

由於雪碧將調整其內容,您可以使用Shape來調整您的Sprite的大小。更改形狀大小將有效調整Sprite的大小,而不調整Sprite的其他子項的大小。

 

var bg:Sprite = new Sprite(); 
addChild(bg); 

var fill:Shape = new Shape(); 
//you can make the fill transparent 
with(fill) 
{ 
    graphics.beginFill(0 , 0); 
    graphics.drawRect(0 , 0 , anyWidth , anhyHeight); 
    graphics.endFill(); 
} 
bg.addChild(fill); 

//then add the fill that you want visible 
var bgFill:Sprite = new Sprite(); 
//add the graphics here 
bg.addChild(bgFill); 


function resizeSprite(event:Event):void 
{ 
    // bgFill will not be resized 
    fill.width = stage.stageWidth; 
    fill.height = stage.stageHeight; 
} 

+0

感謝您的迅速回復,我很欣賞您爲編寫此響應而付出的努力,但是在檢查並玩過您的代碼之後,看起來您只是將sprite用作另一個sprite的容器。這是一種擊敗我的問題的目的,因爲我完全知道這種遏制方法。我已經更新了我的帖子,儘可能清晰,我希望你能幫助我修改這個問題=)〜PtK – Partack 2010-11-02 02:40:52

+0

沒問題,我確實錯過了BitmapFill位:(我的閱讀傾向太快了!無論如何,恭喜你的回答,多少人可以提供幫助,我認爲自己找到答案總是更令人欣慰:) – PatrickS 2010-11-02 05:15:48