2010-03-10 97 views
3

我是很新的2D-引擎的世界。我想出瞭如何加載圖像並將它們顯示爲精靈和東西,但是有一個問題讓我感到困惑。 例如,當「火箭」碰到物體會處理它的傷害,並留下一個火山口的後面。我想在那個物體上展示火山口。這需要在渲染時「跳過」該圖像的某些像素,不是嗎? 我的問題是,你會怎麼做這樣的事情?你會用什麼數據結構來保存?如何顯示「破碎」的精靈?顯示「破碎」的精靈?

回答

2

對於某些情況,您可以簡單地在原始精靈的頂部繪製另一個精靈。或者,您可以根據對象的狀態在不同的精靈之間切換。

3

創建sprite sheet

這將包含所有的靈魂你的對象,在這種情況下,火箭。其中一些圖像會被火箭砸成許多塊,火等等。

然後,當你的物體命中,你玩的碰撞動畫。你的方法在技術上是可行的,但它是過度的。使用精靈表很簡單,而不是繪製大量圖像,只需繪製一部分表單,然後在表單的X軸和Y軸上播放動畫增量。這自然需要將薄片平鋪,但這並不是太多工作。

0

慢,但可能不夠快。

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); 
     } 
0

我正在像這樣的一個手機Java遊戲,蠕蟲/焦土克隆(實際上是基於GunBound)。

你不會爲了留下一個彈坑「跳過」的像素。你改變你的星球位圖中的像素,所以火山口現在是你的星球的永久部分。我假設你知道所有關於位圖,blitting透明,並進行測試。

要創建一個火山口,我使用了圓填充算法,並用背景或透明顏色填充了「爆炸區域」。

這樣做的時候命中測試你已經做了兩遍。對速度進行邊界框命中測試,然後在邊界框重疊時進行每像素點擊測試。

1

我看你已經用XNA標記了這個,所以假設你的API(儘管這個答案很可能適用於任何具有適當調用的OpenGL/D3d方法)。如果你想以優雅的方式做到這一點,我建議使用臨時RenderState。您將切換到新的RenderState並繪製原始背景紋理,然後在頂部繪製火山口精靈(您可以修改RenderState的AlphaSourceBlendAlphaDestinationBlend屬性以創建您正在尋找的減法效果)。

完成繪圖後,可以使用GetTexture()函數輕鬆檢索RenderState作爲紋理。請記住,如果你改變混合模式,你的SpriteBatch應該在「立即」模式下執行(我忘記了XNA術語,但是它沒有對效率進行精確排序)它會意外重置。