2010-12-31 15 views
0

Ich erstelle derzeit ein Spiel und habe ein Problem, das ich denke, ich weiß, warum es auftritt, aber nicht ganz sicher und auch wenn ich wusste, weiß nicht, wie zu lösen. Ich habe ein 2D-Array 10 x 10 und haben eine "Spieler" -Klasse, die eine Kachel aufnimmt. Nun habe ich 2 Instanzen des Players erstellt und sie per Wischen bewegt. An den Rändern habe ich "Wände" gelegt, die der Spieler nicht durchwandern kann und alles funktioniert gut, bis ich eine Wand entferne. Sobald ich eine Wand entferne und den Charakter/Spieler an den Rand des Bildschirms verschiebe, kann der Spieler nicht weiter gehen. Das Problem tritt hier auf, wo die zweite Instanz des Spielers nicht am Rand des Bildschirms ist, sondern 2 Kacheln von der ersten Instanz von "Spieler" sagt, die am Rand ist. Wenn ich versuche, sie weiter in die Richtung der Kante zu bewegen, verstehe ich, dass die erste Instanz des Spielers sich nicht bewegen oder irgendetwas tun würde, aber die zweite Instanz des Spielers sollte sich noch bewegen, aber es wird nicht.Android Spiel Logik Problem

Dies ist der Code, wenn der Benutzer ausgeführt klaut:

if (player.getArrayX() - 1 != player2.getArrayX()) { 
    player.moveLeft(); 
} else if (player.getArrayX() - 1 == player2.getArrayX() && player.getArrayY() != player2.getArrayY()) { 
    player.moveLeft(); 
} 

if (player2.getArrayX() - 1 != player.getArrayX()) { 
    player2.moveLeft(); 
} else if (player2.getArrayX() - 1 == player.getArrayX() && player2.getArrayY() != player.getArrayY()) { 
    player2.moveLeft(); 
} 

In der Spielerklasse I haben:

public void moveLeft() { 
    if (alive) { 
     switch (levelMaster.getLevel1(getArrayX() - 1, getArrayY())) { 
     case 0: 
      break; 
     case 1: 
      subX(); // basically moves player left 
      setArrayX(getArrayX() - 1); // shifts x coord of player 1 within tilemap 
      Log.d("semajhan", "x: " + getArrayX()); 
      break; 
     case 9: 
      subX(); 
      setArrayX(getArrayX() - 1); 
      setAlive(false); 
      break; 
     } 
    } 
} 

Jede Hilfe zu diesem Thema oder weitere Einsicht wäre sehr dankbar, danke .

+0

So viele Fragen ... Was ist 'player.getArrayX()'. Was ist 'subX()'? Was macht 'setArray()'? Was gibt 'getLeve1' zurück? Gerade jetzt ist diese Frage völlig unbeantwortbar und es sieht so aus, als hättest du ein ziemlich chaotisches Design. – Falmarri

+0

getArrayX() gibt die X-Koordinate des Players zurück. subX() subtrahiert die Kachelbreite, setArrayX() setzt die neue x-Koordinate des Spielers und getLevel gibt eine 2D-Kachelkarten-ID an der Position (x, y) zurück. Ich sehe wirklich nicht, wie diese mit der Frage, die ich gestellt habe, etwas zu tun haben, da alle diese Methoden perfekt funktionieren. Ich habe mich nur gefragt, ob die Spielerinstanz sich nicht bewegte, weil etwas damit zu tun hatte, dass die Instanz des ersten Spielers den Rand der Kachelkarte traf. – semajhan

+0

Ich bin immer noch verwirrt darüber, was 'subX()' tut. Was bedeuten die Kachelkarten-IDs? Ich nehme an, dass 0 eine Wand ist, 1 ist ein offenes Feld, und 9 bedeutet, dass die Koordinaten ungültig waren? – Computerish

Antwort

0

gelöst durch eine else if-Anweisung hinzu:

public int getLevel1(int i, int j) { 

    int[][] level = { 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 1, 1, 0, 0, 1, 0, 1, 1, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, 
      {1, 0, 1, 1, 0, 1, 8, 1, 0, 1}, 
      {1, 0, 9, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, 
      {1, 0, 1, 1, 1, 1, 1, 1, 0, 1}, 
      {1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 
      {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} 
    }; 
    if (i >= 0 && i <= 9 && j >= 0 && j <= 14) { 
     return level[j][i]; 
    } else { 
     return 10; 
    } 
}