2013-07-29 97 views
1

我正在用Java編寫一個2D等距遊戲引擎,用於趣味和練習,而且我已經到了想要找出最佳方式渲染精靈的點爲了模擬深度。我對這個主題沒有多少了解,但我總是喜歡在使用其他人之前嘗試提出自己的解決方案。那麼,以下兩種解決方案中哪一種更優化?爲什麼?如果我離得太遠,那麼以正確的順序呈現精靈的實際最佳方式是什麼?注意 - 我的遊戲是自由移動的,例如2D塞爾達而不是Pokemon Red中的網格樣式。Java 2D渲染深度點子

  1. 我可以使用以深度順序存儲的實體對象的鏈表。然後,每當實體移動時,將其當前的Y位置與前一個節點和下一個節點進行比較,並在必要時交換位置。然後,重複該過程直到不再需要。 (我不確定Java的鏈表是如何工作的,但是如果需要的話我可以創建一個自定義列表)

  2. 只需要一個實體數組,其長度等於屏幕高度(以像素爲單位)。然後當每個實體移動時,只需將其在陣列中的位置改變爲等於其在屏幕上的Y位置的位置(或者如果該位置被拍攝,則最近的可用位置)。

回答

1

注意,通過使用AffineTransform我們可以實現像素值(與抖動)來的double精度。對於最平滑的結果,我不會解決任何不使用雙倍像素值的技術。

我剛剛讀到AffineTransform,它看起來非常有用;我很可能會很快開始使用它。但是,我不明白這是如何適用於此。

我懷疑它是在排除一個固定大小的數組相關,如在點觀察2.

假設幀屬於「深度」(例如,1個像素翻譯「上升」對應於一個層即距離較遠的一級),則很容易保持固定的尺寸與最終場景中的高度/潛在深度像素的數量相關,但幾乎不可能用標準(固定尺寸)數組double。對於點1,您可以使用Comparator對圖形元素的List進行排序,該排序依據double深度值進行排序。然後按照列表的順序繪製它們是一件簡單的事情。

+0

哦,我明白了。當你說像素值時,我認爲你的意思是像素中的顏色。現在我看到它是如何應用於此的,在這種情況下,我將使用List選項而不是固定數組 –

+0

*「哦,我明白了。」*說實話,當我剛剛閱讀答案時, ,我意識到現在已經在編輯中添加了重要的缺失部分。無論如何,你自己都會達成相同的基本理解。 :) –