2016-09-27 3 views
0

Ich habe dieses Problem, wo die Kacheln nur eine bestimmte Textur zeichnen. Ich habe mir in den letzten Tagen die Fliessmotoren angeschaut und beschlossen, eine eigene zu Bildungszwecken zu machen. Ich habe es geschafft, nur eine Kachel auf den Bildschirm zu bekommen, und sie zieht diese Kachel in die Karte. in der Karte behandelt es alle Kacheln als die gleiche Textur, während ich in der Lage sein möchte zu bestimmen, welche Kachel wohin geht. Zum Beispiel 1 = Gras, 2 = Himmel, 3 = Schmutz usw. Ich habe Tutorials hier und da verfolgt und online gesucht, um dieses Problem zu finden, aber ohne Erfolg. Im LoadContent der TileMap-Klasse gibt die Console.WriteLine an, dass drei Texturen in die Liste geladen wurden. Ich hatte den Eindruck, dass die draw-Methode in der tileMap den Index auf die Kachel-ID setzen würde, die einer Kacheltextur entspricht, und dann würde diese bestimmte Kachel auf der Karte im Spiel gezeichnet werden. Zum Beispiel würde Index 1 der ersten Textur im verlorenen entsprechen, Index 2 würde der zweiten Textur entsprechen und so weiter. Ist das eine korrekte Annahme oder bin ich weg?nur eine Kachel in Karte gezeichnet xa C#

Auch können Sie mir Hilfe/Hinweise auf Möglichkeiten geben, dieses Problem von nur einer Textur auf dem Bildschirm zu beheben.

Vielen Dank im Voraus.

Tile Map

class TileMap 
    { 
     private MapCell[,] mapCell; 
     public const int TILE_WIDTH = 64; 
     public const int TILE_HEIGHT = 64; 

    private List<Texture2D> tileList = new List<Texture2D>(); 

    public TileMap(int[,] exisitingMap) 
    { 
     //initialise this to a new multidimensional array; 
     mapCell = new MapCell[exisitingMap.GetLength(0), exisitingMap.GetLength(1)]; 
     // x always starts on one 
     for (int x = 0; x < mapCell.GetLength(1); x++) 
     { 
      for (int y = 0; y < mapCell.GetLength(0); y++) 
      { 
       mapCell[y, x] = new MapCell(exisitingMap[y, x]); 
      } 
     }  
    } 

    public void loadTextureFiles(ContentManager content, params string[] fileNames) 
    { 
     Texture2D tileTexture; 
     foreach (string fileName in fileNames) 
     { 
      tileTexture = content.Load<Texture2D>(fileName); 
      tileList.Add(tileTexture); 
      Console.WriteLine(tileList.Count + " Tile texture count "); 
     } 
    } 

    public void Draw(SpriteBatch spriteBatch) 
    { 

     for (int x = 0; x < mapCell.GetLength(1); x++) 
     { 
      for (int y = 0; y < mapCell.GetLength(0); y++) 
      { 
       // setting the index to the tile ID 
       int index = mapCell[y,x].TileID; 
       Texture2D texture = tileList[index]; 

       spriteBatch.Draw(texture, new Rectangle(x * TILE_WIDTH, y * TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT), Color.White); 

      } 
     } 
    } 
} 

Karte Handy

class MapCell 
{ 
    public int TileID { get; set; } 

    public MapCell(int tileID) 
    { 
     tileID = TileID; 
    } 
} 

Game1

TileMap tileMap = new TileMap(new int[,] 
    { 
     { 0,0,0,0,0,0,0 }, 
     { 1,1,1,1,1,1,1 }, 
     { 0,1,1,2,1,1,1 }, 
     { 0,2,1,3,1,3,0 }, 
     { 0,3,0,3,0,0,0 }, 
     { 0,0,0,2,0,0,0 }, 
     { 0,0,0,1,0,1,0 }, 
    }); 

protected override void LoadContent() 
    { 
     new SpriteBatch(GraphicsDevice); 
     tileMap.loadTextureFiles(Content, "Tiles/Tile1", "Tiles/sky", "Tiles/dirt"); 
    } 

protected override void Draw(GameTime gameTime) 
    { 
     spriteBatch.Begin(); 
     tileMap.Draw(spriteBatch); 
     base.Draw(gameTime); 

     spriteBatch.End(); 
    } 

Antwort

1
class MapCell 
{ 
    public int TileID { get; set; } 

    public MapCell(int tileID) 
    { 
     tileID = TileID; 
    } 
} 

sollte stattdessen TileID = tileID sein. So wie es ist, wenn Sie 3 an tileID übergeben und dann 0 (der Standardwert für TileID) zu tileID zuweisen. aber TileID wird nie geändert, also ist es immer 0. Tausche die Leute um und es wird wahrscheinlich funktionieren.