2014-06-12 162 views
1

有我正在開發的新遊戲的瓦片spritesheet。我打算將它們用於遮罩層。我的意思是,例如每個spritesheets上有30個不同的貼圖,爲了使用每個貼圖我打算改變spritesheet的x和y,所以mask只顯示想要的貼圖。 但問題是,它可能會強制cpu。AS3:使用蒙版和裁剪圖像

例如,如果屏幕上有30個貼圖,並且每個spritesheets有30個不同的貼圖,那麼如果我使用遮罩層而不是裁剪每個貼磚,則會生成900個貼圖。

所以問題是,如果我使用掩膜層,它會影響CPU的壞方式,或者只有在掩膜下面的部分計算在CPU上?

我希望我能清楚地定義問題。

謝謝

-Ozan

+0

爲什麼不使用Starling框架?學習真的不難,通過使用GPU可以獲得最佳性能,並且可以解決許多這些紋理問題。 – Eduardo

+0

通過bitmapdata提供的繪圖工具爲您提供了將Spritesheet的一部分複製到新位圖的選項。該過程不使用掩蔽。對於基於sprite的圖形,我強烈推薦Starling,它爲您提供工具,通過紋理和紋理圖集進一步簡化精靈圖表的工作。 – Marty

+0

謝謝你們,我會檢查Starling。 :) –

回答

1

椋鳥是一個全新的領域,因爲它使用的Stage3D。這意味着你必須重新考慮你的開發流程 - 所有東西都必須是紋理,所以有很多限制 - 你不能簡單地在你的Flash IDE中設計一個按鈕,給它一個名字並使用它。我並不是說這很糟糕,不,我只是說你必須明智,如果你沒有任何經驗 - 學習需要時間。

我想你是在做一些錯誤的計算。您說例如,如果屏幕上有30個貼圖,並且每個spritesheets有30個不同的貼圖,則會生成900個貼圖,這意味着您有30個貼圖每個上有30個貼圖。這是你遊戲中的很多瓷磚,你確定嗎? :)

無論如何,常見的做法是使用spritesheet的每個瓷磚作爲一個單獨的。這就是爲什麼它被稱爲spritesheet。這個意思非常簡單 - 它將使用的記憶。想象一下你在一個spritesheet中有100個tile(爲了更簡單的計算),並且這個spritesheet是1mb。如果你將它拼接成更小的塊(其中100塊),它的尺寸也將接近1mb。所以如果你這樣做,並刪除原始的源,由於這些位圖將採取的RAM將接近原始。

然後你想要使用一個瓷磚(或者讓我們說你的地圖只是「水」,而你只使用一個瓷磚)。您可以實例化同一個類的許多實例,並且由於您只使用一種類型,因此要顯示的內存是原始1mb的1/100。

我的意思是說,最壞的情況是同時使用它們的總數爲100,而這將花費1mb的內存(我只是在討論圖片)。每次使用較少時,內存會減少。

使用蒙版的方法更糟糕,因爲即使使用單個瓦片,它也會將所有原始spritesheet放入內存中。單瓦 - 1mb。 它還會繪製一個遮罩對象(Sprite),並且還需要預先計算該遮罩並移除位圖的外部部分。這是更多的內存,更多的CPU計算和更多的圖形渲染(因爲它會在每次實例化時繪製裁剪的位圖)。

我想這會給你一個想法,爲什麼它會這樣使用! :)如果你有一些奇特的區域,這就是你想要使用遮罩的原因,那麼使用一些spritesheet打包程序。它將爲您提供一個數據文件,用於描述所使用的spritesheet區域,並且對於單個類(有很多類),它將解析您的初始位圖,爲每個塊創建位圖子項並銷燬原始位圖。座標並不重要。

乾杯! :)

+0

是的,這完全是我問過的!非常感謝你。順便說一句,我沒有錯誤計算,就像你說的,如果我使用掩模併爲每個單獨的瓷磚使用整個spritesheet,總共會生成900個瓷磚(30x30):D所以我問它是計算整個spritesheet還是僅計算整個spritesheet蒙面部分。不管怎樣,非常感謝你,你完全回答了我的需要。 :) –