Ich erstelle ein Arcade-Spiel für eine Klasse. Das Spiel ist Spalten. Ich versuche, alle frei schwebenden Blöcke einmal pro Sekunde fallen zu lassen. Mein Code, um sie fallen zu lassen funktioniert, aber der Timer nicht. Hier sind die relevanten Teile meines Codes.Swing-Timer funktioniert nicht
Diese ersten beiden erscheinen in meinem Blockmanager Objekt, das ich benutze die interne Logik UI
public void play(){
t = new Timer(1000, this);
t.start();
}
public void actionPerformed(ActionEvent e) {
for(int v = 0;v < this.x; v++){
if(v > this.x || v < 0){
break;
}
for(int b = 0;b < this.y ;b++){
this.gameScreen.get(v).get(b).setActive(true);
}
}
for(int i = 0;i < this.x; i++){
if(i > this.x || i < 0){
break;
}
for(int j = 0;j < this.y ;j++){
if(this.gameScreen.get(i).get(j).getActive() == true){
if(j + 1 < this.y){
if(this.gameScreen.get(i).get(j+1).toString().equals(".")){
Collections.swap(this.gameScreen.get(i), j, j+1);
this.gameScreen.get(i).get(j+1).setActive(false);
}
}
}
}
}
}
this is the main method that is another file.
public static void main(String[] args){
ColumnsUI Col = new ColumnsUI(9,9);
Col.game.nextBlock();
Col.gw.add(Col.show);
Col.game.play();
}
Die Spalten zu verwalten Objekt ist eine einfache Methode, die auf der internen Logik basierenden Farben. Ich bezweifle, dass es etwas mit der Fehlfunktion des Timers zu tun hat, da es funktionierte, als ich den Inhalt von actionPerformed manuell anrief.
Danke für jede Hilfe!
„Mein Code ihnen Werke fallen, aber der Timer nicht.“ Bitte mehr Informationen liefern als „funktioniert nicht.“ Was haben Sie passieren erwartet zu ? Was ist stattdessen passiert? – VGR
Ich habe erwartet, dass der Code in actionPerformed ausgeführt wird. Wenn ich es außerhalb dieser Methode bewegte und es manuell ausführte, tat es genau das, was es beabsichtigte, das heißt, es bewegte die Blöcke nach unten. –
Ist es möglich, dass 'Col.game.play();' eine andere play() Methode als die in Ihrer Frage gezeigte ausführt? – VGR