2012-02-17 55 views
2

我很好地創建了我的2維重新創建的我的世界的Java。我知道這可以做得很好,youtube上的orange451激勵我嘗試並做到這一點。我從文本文件加載地圖上的所有塊,當遊戲加載時,它將文本文件中的所有塊添加到ArrayList中。我創建了一個算法來計算遊標在遊戲中的塊的索引,並添加了一個MouseListener,以便當我單擊它時,將用空氣塊代替塊(基本上銷燬塊)。爲了替換ArrayList中的塊,我使用了ArrayList set(index,obj)方法。從理論上講,它應該是正確的,它在某種程度上是確實的。唯一的問題是,它還會在幾個街區外的地圖上創建一個黑色空間。這非常令人沮喪,特別是因爲我到目前爲止。其他信息:我需要一種方法來替換ArrayList中的對象,或者更好的方法來實現它,因爲我的碰撞檢測方法也使用ArrayList來檢測塊位置。請幫幫我!我不能張貼圖像,但是它將塊設置爲空氣紋理,但是在它附近創建了一個黑色正方形(數組列表中的間隙?)。因爲那裏有太多的代碼後,繼承人對整個項目的源代碼:Blockworld 2D Source我的世界2d修改:構建和銷燬塊問題

+1

發佈代碼段比發佈圖片更有用。 – Juvanis 2012-02-17 07:58:52

+0

請發佈您的代碼(或[SSCCE](http://sscce.org/)) – Marcelo 2012-02-17 08:00:10

+0

如果您在從列表中刪除元素時遇到問題,請發佈實際從列表中刪除元素的代碼部分。發佈你用來渲染圖像的代碼不會幫助你獲得任何地方。 – Marcelo 2012-02-17 09:46:30

回答

4

你這個苦苦掙扎,因爲知道他們的協調對象的ArrayList是代表這個二維結構的瘋狂方式。它是無序的 - 你可以反轉或洗牌你的ArrayList,它會繪製相同的。它有O(N)更新,因爲您必須在ArrayList中搜索適當座標的對象,然後才能替換它。它可以有多個具有相同座標的對象。它可能處於可見座標根本沒有相應對象的狀態 - 這就是您在這裏遇到的情況。

請幫我

確定。從字節的二維數組(不是ArrayList)開始。它允許你256種區塊,並且讓你的玩家可以在沒有經常分配內存的情況下挖掘你的瘋狂。爲了繪製世界,遍歷可見的座標和映射字節到位圖或類似的地方。

另外:2D Minecraft已經存在。它被稱爲Terraria。

+0

如果可以的話,我會贊成你兩次。 – Marcelo 2012-02-17 11:38:54

+0

好吧,我會盡快地嘗試。 – Ki11akd0g 2012-02-17 18:53:57

+1

'char'是一個16位的unicode字符,因此允許65536個不同的值,但可能比'byte'或'short'更不合適。但除此之外,+1。 – Weeble 2012-02-17 19:07:43