2011-06-03 73 views
3

是否可以顯示精靈的另一個實例?我想要做的是反映一個動畫精靈。
到目前爲止,我的Sprite被稱爲「畫布」,其內部的動畫使用AS3進行動畫處理。我想要做的就是展示它的翻轉副本,在它下面看起來像一個反射。我嘗試下面的代碼,但沒有運氣,它只是隱藏一切嗎?..顯示精靈的另一個實例

addChild(canvas); 
var reflection:Sprite = new Sprite(); 
addChild(reflection); 
reflection.addChild(canvas); 

任何想法,爲什麼這個代碼不工作?或者你有更好的方法來解決這個問題。
感謝

+2

的addChild(畫布)增加了帆布,然後reflection.addChild(畫布)去除畫布和從它的前一個父母,並將其添加到反射。你需要一個畫布的副本。最簡單的解決方案是使用BitmapData將畫布的內容繪製到其中,如果您願意,可以應用變換矩陣將其翻轉並遮罩。幸運的是,您可以使用[Adobe Devnet上的Reflection類](http://www.adobe.com/devnet/flash/articles/reflect_class_as3.html)。 – 2011-06-03 10:34:17

+0

@George,你在我發佈我的答案之前寫了那條評論!應該把它放到一個答案我woulda upvoted :)。 – 2011-06-03 10:36:00

+0

@Ascension完成。這就是我已經在努力的。 :) – Matthias 2011-06-03 10:42:18

回答

3

您可以使用BitmapData

類成員:

// flip vertically and shift by 100 (insert your canvas size) 
private var reflect:Matrix = new Matrix(1, 0, 0, -1, 0, 100); 
// instanciate BitmapData with 100x100 size (insert your canvas size), 
// filled with black but with 100% transparancy, it's an 
// ARGB value (0 == 0x00000000) 
private var reflectionData:BitmapData = new BitmapData(100, 100, true, 0); 
private var reflection:Bitmap = new Bitmap(reflectionData); 

INIT:

// you might want to draw canvas already on startup 
reflectionData.draw(canvas, reflect); 
reflection.x = canvas.x; 
reflection.y = canvas.y + canvas.height; 
addChild(reflection); 

上動畫/重繪

// clear to transparency 
reflectionData.fillRect(reflectionData.rect, 0); 
// draw the current canvas with matrix applied 
reflectionData.draw(canvas, reflect); 
+0

這很好!只有一個問題,當它第一次加載時,它會非常快速地閃爍,而我該如何解決這個問題? – Owen 2011-06-03 12:51:05

+1

@Owen默認情況下,'BitmapData'在初始化時被填充爲白色。我會改變這個答案,使它充滿黑色但100%透明,並且畫布已經被繪製在'init'中。 – Matthias 2011-06-03 20:42:26

1

你有幾乎相同的問題在這樣的回答:

Adding multiple instances of a Sprite?

會告訴你爲什麼你現有的代碼無法正常工作。至於如何完成你想要做的事情,我只是使用一個位圖對象來繪製原始的精靈反轉。您可以使用傳遞到Bitmap.draw函數中的Matrix對象作爲參數來執行此操作。創建矩陣時,只需將垂直維度的比例值1倒置並將其設置爲-1。這裏是如何做到這一點的教程:

http://www.adobe.com/devnet/flash/articles/reflect_class_as3.html

他們可能沒有使用矩陣變換,並可能只是反轉包含的BitmapData精靈的規模,我不知道我沒有帶讀完整的教程。我所知道的是這個教程會給你準確的你想要做的事(有一個例子)。