Also versuche ich ein einfaches Match 3 Spiel zu erstellen. Ich habe eine Aktorklasse Tile erstellt, um das Bild und die Daten über Zeile und Spalte zu speichern und eine andere Klasse GameField erstellt, die ein Array der Größe 9 * 9 der Kachel hat.Wie tausche ich Schauspieler in libgdx
Ich habe eine Funktion namens swap kacheln erstellt, um die Kacheln wie folgt zu tauschen, aber es hat ein seltsames Verhalten, dass nach zwei vertauschten Kacheln einer von ihnen auf Klicks reagiert, während der andere nicht mehr reagiert.
Hier sind die Eingänge Hörer von Tile-Klasse und die Swap-Kachel-Funktion von Spielfeld:
addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
setActiveSprite(row, column, colour);
System.out.println("clicked" + "row :" + row + "column" + column);
return false;
}
});
public void setActiveSprite(int r, int c, int colour){
System.out.print(colour);
if (!(gf.activeTile.colour==0)){
gf.swapTiles(r, c, colour);
gf.activeTile.colour=0;
} else {
gf.activeTile.setAll(r, c, colour);
}
}
public void swapTiles(int r, int c, int colour) {
gameField[activeTile.row][activeTile.column].addAction(Actions.moveTo(
(40 + ((gameField[r][c].getHeight() * c) + (10 * c))),
(200 + (gameField[r][c].getWidth() * r)),
0.5f));
//setting the new position of clicked tile
gameField[r][c].addAction((Actions.moveTo(
(40 + ((gameField[r][c].getHeight() * activeTile.column) + (10 * activeTile.column))),
(200 + (gameField[r][c].getWidth() * activeTile.row)),
0.5f)));
Tile Temp = gameField[activeTile.row][activeTile.column];
gameField[activeTile.row][activeTile.column] = gameField[r][c];
gameField[activeTile.row][activeTile.column].row = activeTile.row;
gameField[activeTile.row][activeTile.column].column = activeTile.column;
gameField[r][c] = Temp;
gameField[r][c].row = r;
gameField[r][c].column = c;
}
Bitte informieren Sie mir, die möglichen Fehler, die ich denke, in der swapTile Funktion gibt
Konstruktor verwendet werden kann, wenn der Inhalt der Klassen bekannt ist, was ist, wenn der Inhalt nicht bekannt ist, wie Textur-Klasse als meine Actor erweitert ein Image und enthält auch eine Texture-Klasse. –
können Sie den 'Image (Drawable Drawable)' - Konstruktor von Image verwenden und das Ergebnis 'getDrawable() 'anderer Tile an diesen übergeben –