2012-04-06 112 views
0

我正在用Java構建一個基於2D的自頂向下拼貼遊戲。當然,你可以平移和放大遊戲,目前放大10個不同的級別,其中每個瓦片適當地從10x10像素到100x100像素。目前,每個縮放級別的圖塊都存儲在單獨的精靈圖紙中,在程序啓動時讀入並存儲在緩衝圖像數組中。我相信這不可能是解決這個問題的最好方法。Java拼圖遊戲縮放

我在尋找提高長期效率的技巧,最好是隻有100x100的瓷磚,並在java中動態調整它們;以某種方式在Java中使用矢量圖形(我確定如何,但我相信谷歌可以幫助我)或什麼?

非常感謝!

+1

'svg's(矢量圖形)在這裏會很好。 – Jon 2012-04-06 17:44:47

+0

我會看看,謝謝你的頭:) – 2012-04-06 17:47:39

回答

1

我會去充滿活力。 通常在計算機圖形學中,您使用適用於圖形上下文的矩陣,修改您在其上繪製的所有內容。

這是用來修改位置,比例,旋轉等。而不是減去相機的位置到每個瓷磚,你將翻譯一次應用到圖形上下文,然後你在世界位置繪製瓷磚。圖形上下文將負責將拼貼放置在正確的屏幕空間中。

我建議你以下寫着:

http://docs.oracle.com/javase/tutorial/2d/advanced/transforming.html http://www.javalobby.org/java/forums/t19387.html

+0

感謝您的意見! – 2012-04-06 18:04:36

+0

對主圖形組件使用仿射變換時,計算機是否渲染出來,或者至少計算出可見區域之外的東西。顯然,如果遊戲必須計算所有常用的東西,但是對於整個地圖,不僅僅是可見區域,它將佔用更多的CPU使用量。謝謝! – 2012-04-06 18:16:27

+0

@DanielMessias如果一個圖塊不在視圖中,它將不會被渲染,但它會浪費資源。爲了剔除,您仍然需要在代碼中進行優化。一般來說,你有一個矩形包含相機frustrum,你需要修改應用翻譯和縮放。然後,您基於此應用剔除併發送以僅顯示可見內容。你不想對不可見的對象進行矩陣計算! – 2012-04-06 18:46:51

0

如果你正在做固定的縮放(即每個縮放級別從CAMER固定的距離),而不是液體變焦(在玩家可以放大3.3倍,7.5倍,而不僅僅是1倍,2倍,3倍等),那麼試圖通過簡單地應用縮放變換來解決這個問題是非常浪費的。這很誘人,因爲這是最簡單的方法,從實現的角度很容易理解,但這意味着在最大縮小範圍內,您將渲染的面積在X方向上大10倍,在10倍大Y方向 - 因此您必須渲染的世界的區域比最大放大時大100倍。我也懷疑,當你縮小時,你會喜歡你的紋理被硬件擠壓的方式。計算機圖形與光學 - 子像素渲染不同,在計算機圖形學中發生的其他事情不會使你的紋理看起來非常好,如果你把這個任務從軟件/硬件上移開。

即使您進行流體縮放,我仍然會進行細節層次的紋理處理,並根據呈現的世界與相機之間的距離動態調換它們。

此外,10縮放級別?你確定你真的需要10個縮放級別嗎?縮放通常用於2D遊戲,以便您在不同的細節層次上執行不同的活動,因爲特定的縮放級別特別適合於某些特定的活動。我不記得任何需要10個縮放級別才能完成的2D遊戲。 3-5是我見過的最多,我從來沒有覺得這是不夠的。在10個縮放級別的每個縮放級別上生成圖像似乎也有很多藝術作品。

你也很可能會發現應用AffineTransform聽起來不錯,但是它的計算量非常大,而且如果你需要60fps的性能,你很難以這種方式實現。儘管不要聽我的話,但試試吧,看看它本身有多糟糕。

+0

我明白你的觀點。我同意你在10個縮放級別太多的觀點。這只是一個有趣的項目,所以性能並不重要,但我完全同意你不需要超過5個。我相對較新的Java,因此在簡單的遊戲中使用圖像轉換可能更容易我,但我完全看到你的觀點,感謝您的輸入:) – 2012-04-06 18:29:37

+1

它不是一個或其他。您可以將流體縮放(包含轉換)和不同級別的細節組合在一起。以中世紀全面戰爭II爲例。當您縮小時,3D模型會鬆動紋理質量。如果你縮小更多,他們會變成2D SPRITES! – 2012-04-06 18:50:57

+0

此外,最大放大可能不是「正常縮放」。因此,顯示10倍更大的屏幕區域可能並不那麼巨大,但正常。這一切都取決於您繪製了多少物體以及它們具有的紋理質量(/像素密度)。 – 2012-04-06 18:51:26