2010-10-31 95 views
3

我正在研究自頂向下的RPG,並希望實現無縫滾動貼圖。也就是說,當玩家探索世界時,地圖之間沒有加載屏幕,並且沒有到下一個區域的「門」。無縫滾動瓷磚地圖

我有兩種方式來打破世界。在頂層,我有「區域」,它只是9個「地圖」的集合(這些區域僅由目錄表示)。在該區域內,9張地圖被組織成3×3的網格。我還沒有想出表達這些地圖的最佳方法,無論是通過索引還是通過相對於其父區域的相對座標。這些地圖是實際呈現給用戶屏幕的內容。考慮到每張地圖的大小和視口的大小,我知道用戶只能在地圖的角落看到最多四張地圖。

我的問題是,當玩家探索世界時,我如何跟蹤代碼中的地圖及其各自的偏移量?我在考慮有一個map<Point, Map*>,0,0是玩家當前所在的地圖。如果玩家在地圖的左下角,那麼東部的地圖將被存儲爲1,0,南方的地圖爲0,1,東南方向的地圖爲1,1。我預見到的問題是,我不確定這些分數是否可變,並且如果每次玩家移動到另一張地圖或地圖的不同部分時都重建列表,將導致問題。

+0

整個世界會一次回憶嗎?或者你會在玩家走路時加載相鄰區域? – 2010-10-31 05:32:23

+0

他們將在玩家走路時加載。我一直在思考這個問題,也許它不像我想的那麼難。我可以保留加載的地圖列表。當我遍歷列表來渲染它們時,我只是預先形成一些檢查來查看它們與玩家所在地圖之間的關係。我可以保留一個指向「當前地圖」的指針,以檢查列表中的所有地圖。如果玩家在地圖範圍之外,那麼我可以卸載它。 – rcapote 2010-10-31 05:36:41

回答

2

這就像我在用FreeBASIC寫的遊戲一樣。我在做的事情略有不同,但也許可以有所幫助。

我有一個1024^2的世界地圖(所以我可以生成它的分形)。世界地圖上的每個地塊廣場都是一個地區地圖(一個具有程序歷史的微型王國),但我製作地圖非常容易。區域地圖是128^2,我有四個在256^2陣列。當你靠近邊緣時,它會移動地圖並創建2-3個新區域(儘管它只會產生一個歷史 - 玩家所在的區域)。

這些內部是256^2區域地圖,它也在512^2陣列中平鋪2x2。再次,接近邊緣時,它會移動併產生新的邊緣。

前段時間我嘗試了一個3x3的網格,但不得不拒絕它效率低下。

1

考慮一下deque deques。這樣在所有四面插入和刪除都很容易。

1

那麼如果你有地圖的3x3的指針數組,你有0,0是左上角,如果你去到房間的北面,你可以做什麼,你可以做這樣的事情每個 maps[1,1] = maps[1,0]; 舉動映射一個並重新加載第一行。

祝你好運!希望您找到有效的解決方案!

1

建議:視口。

我在一個GPS設備上工作,該設備爲繪圖定義了一個大區域,但是屏幕只會定義整個區域的一個部分或視口。滾動涉及移動視口(或更改顯示器的內存位置),並重新加載屏幕(使用圖形芯片)。

這個概念就像一個3x3網格。視口從中心開始。向左移動,更改顯示內存的地址。

希望這會有所幫助。

順便說一句,這是一個嵌入式系統,其中的應用程序可以100%控制所有硬件設備(不與其他應用程序共享)。