我是很新的2D-引擎的世界。我想出瞭如何加載圖像並將它們顯示爲精靈和東西,但是有一個問題讓我感到困惑。 例如,當「火箭」碰到物體會處理它的傷害,並留下一個火山口的後面。我想在那個物體上展示火山口。這需要在渲染時「跳過」該圖像的某些像素,不是嗎? 我的問題是,你會怎麼做這樣的事情?你會用什麼數據結構來保存?如何顯示「破碎」的精靈?顯示「破碎」的精靈?
回答
對於某些情況,您可以簡單地在原始精靈的頂部繪製另一個精靈。或者,您可以根據對象的狀態在不同的精靈之間切換。
創建sprite sheet。
這將包含所有的靈魂你的對象,在這種情況下,火箭。其中一些圖像會被火箭砸成許多塊,火等等。
然後,當你的物體命中,你玩的碰撞動畫。你的方法在技術上是可行的,但它是過度的。使用精靈表很簡單,而不是繪製大量圖像,只需繪製一部分表單,然後在表單的X軸和Y軸上播放動畫增量。這自然需要將薄片平鋪,但這並不是太多工作。
慢,但可能不夠快。
public static void Fill(this Texture2D t, Func<int, int, Color> perPixel)
{
var data = new Color[t.Height * t.Width];
for (int y = 0; y < t.Height; y++)
for (int x = 0; x < t.Width; x++)
{
data[x + (y * t.Width)] = perPixel(x, y);
}
t.SetData(data);
}
我正在像這樣的一個手機Java遊戲,蠕蟲/焦土克隆(實際上是基於GunBound)。
你不會爲了留下一個彈坑「跳過」的像素。你改變你的星球位圖中的像素,所以火山口現在是你的星球的永久部分。我假設你知道所有關於位圖,blitting透明,並進行測試。
要創建一個火山口,我使用了圓填充算法,並用背景或透明顏色填充了「爆炸區域」。
這樣做的時候命中測試你已經做了兩遍。對速度進行邊界框命中測試,然後在邊界框重疊時進行每像素點擊測試。
我看你已經用XNA標記了這個,所以假設你的API(儘管這個答案很可能適用於任何具有適當調用的OpenGL/D3d方法)。如果你想以優雅的方式做到這一點,我建議使用臨時RenderState
。您將切換到新的RenderState並繪製原始背景紋理,然後在頂部繪製火山口精靈(您可以修改RenderState的AlphaSourceBlend
和AlphaDestinationBlend
屬性以創建您正在尋找的減法效果)。
完成繪圖後,可以使用GetTexture()
函數輕鬆檢索RenderState作爲紋理。請記住,如果你改變混合模式,你的SpriteBatch應該在「立即」模式下執行(我忘記了XNA術語,但是它沒有對效率進行精確排序)它會意外重置。
- 1. 爲什麼我的精靈圖像破碎[x],但也顯示顯示圖像?
- 2. AndEngine無法顯示精靈
- 3. Cocos2D iPhone - 淡出精靈,留下碎片
- 4. Pygame:顯示沒有羣體的精靈
- 5. 顯示精靈的另一個實例
- 6. cocos2d隱藏/顯示動畫的精靈
- 7. 在XNA中顯示精靈的數組
- 8. 爲什麼我的精靈不顯示?
- 9. 顯示精靈的下一幀GDI
- 10. iOS背景精靈不顯示
- 11. 使用CGContext顯示精靈表iPhone
- 12. 不知道如何顯示精靈
- 13. 精靈表不是視網膜顯示
- 14. cocos2d swift如何顯示一個精靈?
- 15. iPad - 爲視圖顯示「精靈」動畫
- 16. 不顯示我希望它們顯示的精靈
- 17. 破碎的JavaScript
- 18. 如何讓精靈從精靈表變成另一個精靈?
- 19. iOS上的Cordova顯示破碎的圖像
- 20. PHP - 從數據庫中顯示破碎的圖像
- 21. 的Visual Studio 2013 New Project對話框破碎顯示空白
- 22. Laravel 4.2干預 - 圖像顯示破碎的圖像
- 23. 得到Safari瀏覽器不顯示破碎的圖像符號
- 24. PHP GD圖像庫顯示空盒/破碎的形象
- 25. 破碎的分頁
- 26. 破碎JSON
- 27. 精靈和標籤的問題以白色框顯示
- 28. 我如何顯示大量不同的精靈
- 29. 用精靈顯示圓角圖像的最佳方法
- 30. CSS精靈菜單不顯示正確的背景