2016-06-27 21 views
2

我正在構建一個spritesheet類。希望這對某個人來說可能是低掛的,但我很難過。如何更改AS3中的位圖數據

我有一個spritesheet(png格式),我已經在運行時加載和使用從Spritesheet類。作爲內這個代碼文件ouside構造方法的置於它的一個部分上的階段:

 private function onLoad(e:Event):void 
    { 
     var loaderBmp:Bitmap = Bitmap(_loader.content); 
     _bmpData.copyPixels(loaderBmp.bitmapData, new Rectangle(0,0,80,80),new Point(0,0)); 
    } 

工作正常。我得到了很好地顯示.png文件的片段。在我的情況下,spritesheet是爲了動畫角色,所以我需要更新BitmapData,我沒有任何運氣。以下是我在一個函數嘗試這種我Main類中我使用取決於角色的狀態改變的動畫幀:

c._thisSpriteSheet._loader.content.bitmapData.copyPixels(loaderBmp.bitmapData, new Rectangle(0,20,50,30),new Point(0,0)); 

loaderBmp是一個變量誰的值var loaderBmp: Bitmap = Bitmap(_spriteSheet._loader.content);

c是對字符Runner對象的引用。

_spriteSheet是類型SpritesheetRunner類別的財產。

_loaderc._spriteSheet的屬性,並且是spritesheet實例化時使用的Loader對象。

它不會拋出錯誤,但它也不會替換原來的bitmapData對象。我想這也許意味着我需要創建一個新的BitmapData對象,並在copyPixels方法中使用該對象,但返回相同的結果(無)。當我在調試模式下遍歷代碼時,一切看起來像是在工作,但我的顯示對象不會使用新的bitmapData進行更新。我絆倒了什麼?

感謝您的期待!

回答

2

嗯,可能沒有人會閱讀這個,因爲我很快回答,但我真的花了3天的時間來解決這個問題。有時試圖以簡明的方式提出問題可以幫助回答他們自己的問題,並且稍後,瞧!

因此,如果有人有類似的問題,我做錯了什麼是我試圖通過最初加載它的Loader訪問BitmapData對象。然後它告訴我,我可以直接通過我所做的SpriteSheet類的屬性直接引用BitmapData。我認爲這會讓別人很難理解。如果主持人看到這個並認爲它是垃圾郵件,我不介意它被擦除,但我認爲我會保持它。新的代碼是這樣的:

c._thisSpriteSheet._bmpDSheet.copyPixels(loaderBmp.bitmapData, new Rectangle(0,20,50,30),new Point(0,0)); 

_bmpDSheet是類的bitmapData屬性。

+1

是的,如果要經常引用某些內容,請使用屬性並填充數據。但是請注意,當你有很多類似的對象具有相同的精靈表時,你會用'copyPixels()'來判斷性能問題,你必須首先切分你的'loaderBmp.bitmapData',存儲集'BitmapData'對象,然後改變你的'c._thisSpriteSheet._bmpDSheet'指向那個集合的另一個成員,而不是運行'copyPixels()'。 – Vesper