2016-05-13 11 views
0

Ich habe derzeit meine Kachelkarte mit einem 2D-Array gezeichnet und mein Charakter bewegt und gezeichnet auch.Player Kollision mit 2D-Array Tilemap

Ich versuche jetzt, die Kollisionsseite von diesem zu sortieren, ich schaue, um die Spielerposition auf die Kachelkartenkoordinaten zu beziehen, und wenn sie gleich sind, führen Sie die notwendigen Aktionen für die Kollision durch.

Jedoch hat ich den Spielerpositionsvektor zu der 2D-Array zu vergleichen versucht habe, und ich erhalte immer Fehler wie "Cannot implicitly convert int to bool"

ich mich gefragt, ob mir jemand mit dieser Krankheit helfen könnte, die ich überprüfen müssen. Der Code, der die Kompilierung-Fehler liefert, ist if(player.Position == Tiles.Map[(int)player.Position.X, (int)playerPosition.Y])

Hier ist, wie ich meine Karte gezeichnet habe:

public int[,] Map = new int[,] 
{ 
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,1,0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0}, 
}; 

public void Draw(SpriteBatch spriteBatch) 
{ 
    int tileMapWidth = Map.GetLength(1); 
    int tileMapHeight = Map.GetLength(0); 

    for (int x = 0; x < tileMapWidth; x++) 
    { 
     for (int y = 0; y < tileMapHeight; y++) 
     { 
      int textureIndex = Map[y, x]; 
      Texture2D texture = tileTextures[textureIndex]; 

      spriteBatch.Draw(
       texture, 
       source = new Rectangle(x * myTile.Width, 
        y * myTile.Height, 
        tileWidth, 
        tileHeight), 
       Color.White); 
     } 
    } 
} 
+0

'Ich fragte mich, ob jemand mir mit dieser Bedingung helfen könnte, die ich überprüfen muss. Gut, ohne den Kabeljau zu sehen Wenn Sie die Kollision überprüfen, kann Ihnen niemand helfen. Wenn dein Problem in einer konkreten Funktion ist, schreibe nicht eine nicht verwandte, wenn du mit einem Beinschmerz zum Arzt gehst, zeigst du ihm keine Hand, zeigst du das Bein, stimmt's? – Gusman

+0

Ich erklärte oben, dass ich die Player-Position mit dem 2d-Array [x, y] überprüfen möchte. Aber mein Problem war "Kann Int nicht implizit in Bool konvertieren". Ohne dass die Bedingung erfüllt oder erfüllt ist, ist der Kollisionscode redundant. Der Zustand war ich versucht: if (player.Position == Tiles.Map [(int) player.Position.X, (int) playerPosition.Y]) Dies ist, wo mein Problem ist, ich bin nicht sicher, wie man diese Bedingung korrekt schreibt. – Spoingen

+0

Nein, ist nicht redundant, da wir nicht sehen können, warum Sie diese Ausnahme bekommen. – Gusman

Antwort

0

Sie versuchen, den Spieler Position mit einer Reihe von ganzen Zahlen zu vergleichen, aber was Sie wollen ist zu überprüfen, ob das Array eine "1" als Wert auf der Spielerposition hat.

ändern

if(player.Position == Tiles.Map[(int)player.Position.X, (int)playerPosition.Y]) 

Um

if(Tiles.Map[(int)player.Position.X, (int)playerPosition.Y] == 1) 

Else, wenn Sie eine konkrete Position der Karte konw (nennen wir sie X und Y), dann das Array nicht beteiligt ist, es sollte so sein:

if((int)player.Position.X == X && (int)playerPosition.Y == Y) 
+0

Vielen Dank. – Spoingen

+0

Akzeptieren Sie die Antwort, wenn sie korrekt ist;) – Gusman

+0

Das liegt daran, dass die Position des Spielers außerhalb des Karten-Arrays liegt, entspricht das Karten-Array 1: 1 der Position des Spielers? oder repräsentiert jede X-Einheit der Spielerposition eine Zelle? Auch dies ist ein weiterer Fehler, fügen Sie eine neue Frage hinzu und fügen Sie bitte diesmal den richtigen Code hinzu. – Gusman