Warum flackern die objekte im spiel javaFX?

... komplette Frage anzeigen

3 Antworten

Hab mir das auch mal angeschaut, daher folgendes:

  1. In deiner Klasse: "Spielfeld" erstelle eine Methode: "moveElement". Hierbei übergibst du als Parameter mindestens dein Gegner-Rectangle. Die Methode soll die Auf- und Ab-Bewegung machen.
  2. Die Methode "moveElement" rufst du in einem Platform.runLater() auf.
  3. Da du deine Gegner-Elemente in einer Array speicherst und mehrere Threads darauf zugreifen, solltest du deine Gegner-Array als volatile deklarieren.

Aber ich bin mir ehrlich gesagt nicht sicher, ob TimerTask hier der richtige Weg ist. - Und vermute dass du so auf kurz oder lang auf andere Probleme stoßen wirst. 

Ich würde dir eher dazu raten für das Animieren deiner Gegner Timeline mit KeyFrames zu nutzen, Beispiel:

KeyValue xValue = new KeyValue(gegnerLevel1[0].xProperty(), 100);
KeyFrame keyFrame = new KeyFrame(Duration.millis(1000), xValue);
Timeline timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.setAutoReverse(true);
timeline.getKeyFrames().addAll(keyFrame);
timeline.play();
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von gut4fr5g4
08.08.2016, 11:59

Danke! :D 

Die erste richtige Antwort, die kurz sachlich informativ und hilfreich ist! 

0

Kann das leider am Handy nicht wirklich anschaun, ich schau später mal.

ABER der Code ist nicht gut. MovePlayer(string ..). WARUM??? Da nimmt man ein enum! Sonst wer weiss ob es "righ"/"Rechts" oder "rechts" heißt??

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von gut4fr5g4
07.08.2016, 21:56

Ja ok danke

0
Kommentar von triopasi
07.08.2016, 21:57

Verbesste deinen Code erstmal (Stichwort "Refactoring")

0

Das tut richtig weh...

Bitter lern' Grundlagen bevor du Sachen versuchst, die deinen Horizont übersteigen.

Methoden und vor allem Packages IMMER in camelCase.

Übersichtlich heißt KOMMENTARE, davon sind hier null.

Flackern ist normalerweise das Resultat, wenn alle Komponenten einzeln beim Update gelöscht und neu gezeichnet werden.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von triopasi
07.08.2016, 21:55

Kann man aber durch Doppel-Pufferung verhindern (in C# zumindest).

1
Kommentar von gut4fr5g4
07.08.2016, 21:55

Muss das so beleidigend sein? Sag mir doch einfach was der fehler ist... 

0
Kommentar von triopasi
07.08.2016, 21:57

Der Fehler ist 1. schlechter Code und 2. dass immer alles neu gezeichnet wird

0
Kommentar von triopasi
07.08.2016, 21:59

Code der funktioniert kann jeder schreiben, guten Code nur n guter Programmierer ;)

0

Was möchtest Du wissen?