2013-10-08 79 views
3

我一直在想要嘗試創建一個RPG遊戲,一個簡單的遊戲與運動,拿起物品,並打開門。從陣列生成瓷磚地圖

我一直在思考關於瓷磚地圖引擎很長一段時間,但我無法找到任何工作:/

基本上我要完成的是我有一個enum,如:

public enum tileSort { Dirt, Grass, Stone, Empty } 

當發動機通過陣列,這將有0的,1的,等跑,我在想一個switch語句,像:

switch(tileSort) 
{ 
    case '0': tileList.Add(Content.Load<Texture2D>("Tiles/grass")) 
} 

問題是,我不知道如何實現這一點,我所能創建的所有東西都是一個貫穿始終的引擎,並根據您首先加載到遊戲中的內容生成。

我知道這很混亂,因爲我不善於解釋自己。

在此先感謝。

+0

你是在正確的軌道上。你可能想要做的下一步,是弄清楚如何加載/保存瓷磚地圖數據到磁盤,而不是在你的代碼中指定地圖。 – jgallant

+0

也許通過使用StreamReader? 現在我唯一的問題是如何將代碼放在一起:/ – QuackTheDuck

+0

您可能會對此感興趣:http://www.mapeditor.org/您可以創建/編輯/保存地圖數據格式,然後將其加載到你的遊戲。 (關於如何加載的例子很容易在網上找到) – jgallant

回答

3

你可以使用一些工具來幫助您:

我敢肯定,你可以找到許多其他問題。

關於你寫的代碼片段,你不想叫

Content.Load<Texture2D>("Tiles/grass") 

多次爲一個單一的質感。只加載一次紋理,並多次打印相同的資源。你可能有這樣的事情:

var tileList = new List<Texture2D>(); 
string[] tiles = { "dirt", "grass", "stone", "empty" }; 

foreach (var s in tiles) { 
    tileList.Add(Content.Load<Texture2D>("Tiles/" + s)); 
} 

現在每個紋理加載只有一次,你可以使用tileList[index].

下一步是打印屏幕上的瓦片訪問它。我會假設你已經把你的瓷磚加載到一個2維數組中,並帶有瓦片索引。

int[,] tileMap = {{1, 2, 0}, {0, 1, 2}, {3, 3, 1},}; 

for (int i = 0; i < 3; ++i) 
    for (int j = 0; j < 3; ++j) 
     spriteBatch.Draw(tileList[tileMap[i, j]], new Vector2D(50*i, 50*j), Color.White); 
     // Assuming the tiles are 50x50 pixels 

本教程教您想更詳細的內容:http://www.xnaresources.com/?page=Tutorial:TileEngineSeries:1

+0

謝謝,但我如何做一個具有碰撞的瓷磚,或使它可以移動的事件? – QuackTheDuck