首先,我們可以不用對閱讀這部小說不太感興趣,但這個問題沒有任何代碼,它純粹是理論上的。 我在我的手機上,這是一個問題,關於哪種選擇最適合,最容易在這種情況下使用。C#XNA - int [,]數組或Tile [,] tilemap數組
所以對於這個問題,我正在研究我認爲應該是一個基本的Tilemap引擎*,我對我的方法有疑問。我已經多次重寫了它。並不是說這個過程花了太長時間,至少可以說這個項目還處於尿布狀態。
基本上,我有一個帶有此構造函數的Sprite類:字符串名稱,int id,texture2d紋理。
然後,我的Tile類派生自Sprite類,並將它們添加到構造函數中: Int X,int Y,bool walkable。
在我第一次嘗試時,我使用了一個2D整數數組,並將所需拼貼的ID值指定給數組上的位置。 然後,當繪製地圖時,我會循環**整個數組,然後用Tile函數找到當前數組位置爲相同ID的圖塊,這將返回一個新的圖塊,然後我會繼續繪製循環當前的X和Y(與紋理大小相乘,原因很明顯)。因爲在這一點上,我的Tile類沒有X和Y值。這似乎是一個很大的投擲和回來,由於某種原因,我覺得這是一種原始的方法。
但是後來我用另一種方法去做了2D瓷磚陣列,而不是爲每個陣列位置分配一個ID值,然後匹配它,製作一個新的實例,然後繪製它只需循環數組並使用當前的X和Y在構造函數中定位所需拼貼的新實例,然後使用Tile.X和Tile.Y繪製它。看起來更合適。
至少在我運行代碼之前大約一秒鐘就完成了。 看,現在我需要在我試圖繪製它之前用瓷磚完全填充整個數組,否則它會返回一個空對象引用(當然),因爲之前我有一個ID爲0的tile,它會如果沒有其他東西被分配,只需將其作爲默認值。 在我之前所有的混亂中,我也有一個簡單的「if」,只是告訴它如果ID爲0時不畫,但後來我補充說。 我現在意識到我可以對Tile數組做同樣的事情,而不是檢查是否爲0,然後檢查是否爲空。但是,我不在乎檢查是否爲空。 同樣,這對我來說看起來很原始,因爲如果代碼沒有完全被思考並且做了它不應該做的事情。 另外,如果我試圖將一個簡單的xml文件解析爲tilemap,我現在會處於一個醃製狀態,因爲我不知道如何將xml與tile匹配,我之前只能使用這個ID。 順便說一句,我從來沒有使用過XML,所以我只能猜測,如果這將是一個問題。 *儘管如果有人會明確說明何時或爲什麼「項目」可以被視爲一個引擎,無論它的基本性如何,那麼這也會很酷。因爲我不認爲我完全理解這一點。
**我意識到在這種情況下使用foreach會更合適,但這隻適用於Tile陣列afaik。
TL; DR 那麼要結束我的問題.. 什麼是最合適的?瓷磚地圖的int [,]或Tile [,]?而且,我是否應該使用Tile類中的vector2來替代使用2個不相關的X和Y整數進行定位?
注意 - 我是一名計算機科學專業的學生,迄今爲止我們只接受過基本的「hello world」培訓,其餘的我都是從個人興趣中學到的。另外,如果有任何缺陷或使用錯誤,請糾正我的錯誤。我在這裏問是因爲我需要幫助,而且我會提供任何幫助,無論是在線還是在線。但是,如果能夠以適當和建設性的方式提供,我將不勝感激。
編輯:聖潔,我甚至沒有意識到我已經寫了很多。 對於所有人來說,你是真正的MVP!
我喜歡讀這本書,但我沒有爲你回答..雖然關於Monogame和瓷磚理論的真棒帖子! – jhhoff02
我的地圖結構是一個有界的,相對較小的地圖,通常是一個'TileStack'的二維數組。通過'TileStack'擁有關於coords的一些元數據,'Tile'的'List'。然後,「Tile」將包含Tile的id和關於tile實例的附加信息,例如顏色,偏移量,旋轉等。 –