2010-01-13 32 views
3

對於大學期項目,我正在研究使用等距顯示的圖形roguelike(我意識到這個矛盾:P)。我想知道的是,由於繪製所有的圖塊都是非常昂貴且不必要的,因此我想找出一個相對較快的算法來確定哪些圖塊應該繪製爲適合NxMpx窗口,因爲該圖塊圖形是XxYpx。在等軸測圖引擎中剔除偏屏瓷磚

我沒有爲此進行平滑滾動,所以這不是問題。我也不擔心完美 - 一點不必要的抽籤是好的,我只是不想畫出大量不會在遊戲中顯示的不必要的圖塊。

+0

我不知道這是否有幫助,但您可能會覺得它很有趣。 http://simcity.ea.com/about/inside_scoop/3d1。php – 2010-01-13 22:22:09

+0

這絕對有趣,但你是對的,它沒有涉及到主要問題。無論如何,感謝您的鏈接! – Sukasa 2010-01-13 22:40:03

回答

3

你需要考慮兩個概念:屏幕空間和世界空間。這些在3D引擎中非常重要,但它們適用於除最簡單的遊戲外的所有遊戲。在等軸測圖引擎中,您的世界空間是一個二維數組。

因此,您首先要在這兩個座標空間之間進行轉換。一旦你這樣做了,很明顯,屏幕空間會以45度旋轉的方式映射到世界上。你可以確定一個公式,但是隻有當你試圖確定世界空間的哪一部分是可見的時候纔是重要的,所以你只能在該區域模擬怪物(在8位控制檯上需要一個效率,可能不在現代PC上! )。當涉及到實際的渲染,你並不真的需要確定這個世界的可見區域,因爲它是在路上隱含您呈現瓷磚在屏幕上: -

  1. 你的工作哪個瓦片位置是在在屏幕的左上角,將這個O(對於原點)稱爲 - 這將是您想要保留在屏幕中央的興趣點(通常是玩家)的固定偏移量。
  2. 一旦你有了這些,你就可以在屏幕的最上面畫一些瓷磚,在每個瓷磚的世界空間中踩踏+ 1X和-1Y(如果你正朝東北方向看的話)。
  3. 然後你畫下面一行。這是在屏幕空間中減去半個瓦片寬度的偏移量,並從世界空間中的O-1X開始。
  4. 重複第2步和第3步,在X和Y中將世界空間中的起始位置修改爲-1,與之前階段2中使用的位置相同,直到達到屏幕頂部。

其他提示: -

  • 顯然,你不畫是地圖之外的任何瓷磚。根據遊戲設計,你也可能不會在玩家所在的特定房間外面畫任何瓷磚。
  • 不僅有地磚可以繪製,還有玩家,怪物,風景等等。規則是你畫一切在同一通道中的一個特殊的世界位置。這樣,距離「相機」最近的物體會掩蓋它們後面的東西(這就是爲什麼你開始在屏幕頂部繪圖)。
  • 此外,你不只是在大多數iso引擎地磚,你也會有傢俱和牆段。您可以將地圖區域指定爲屬於特定房間,當焦點位於該房間時(例如,因爲玩家在該房間中),您不會在離攝像機最近的房間一側繪製牆段。

無論如何,這足以讓我們繼續,希望它有幫助,您的項目進展順利。