2013-10-08 4 views
3

Я думал о попытке создать игру RPG, простую игру с движением, забрать предметы и открыть двери.Сгенерировать карту плитки из массива

Я думал в течение длительного времени о плитке карты двигателе, но я не могу найти ничего, что работает:/

В основном то, что я пытаюсь выполнить это у меня есть enum, как:

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

И когда двигатель работает через массив, который будет иметь 0-х, 1-х, и т.д., я думаю о распределительном заявление, что-то вроде:

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

Смежные вопросы