Wieso verändert sich die Framerate nach erneutem Starten des AnimationTimer?

MaggyMo

Aktives Mitglied
Guten Abend,

ich versuche aktuell die einzelnen Framerates auszulesen. Das habe ich wie folgt umgesetzt:
public void timerStarten() {
animationTimer = new AnimationTimer() {

@Override
public void handle(long aktFrameRate) {
long alteFrameTime = frameTime[frameTimeIndex];
frameTime[frameTimeIndex] = aktFrameRate;
frameTimeIndex = (frameTimeIndex + 1) % frameTime.length;
if (frameTimeIndex == 0) {
arrayGefuellt = true;
}
if (arrayGefuellt) {
long elapsedNanos = aktFrameRate - alteFrameTime;
long elapsedNanosPerFrame = elapsedNanos / frameTime.length;
frameRate = 1_000_000_000.0 / elapsedNanosPerFrame;
}
};
animationTimer.start();
Der Code funktioniert auch soweit.
Wenn der AnimationTimer vom Benutzer gestoppt und wieder gestartet wird, verändern sich die Framerates so stark, dass meine Berechnungen (von der Frametime ausgehend) starke Schwankungen aufweisen.
Ich habe schon mehrere Codebeispiele ausprobiert und das aktuelle habe ich der folgenden Seite entnommen: https://stackoverflow.com/questions...etting-the-frame-rate-of-a-javafx-application
1621361407360.png
Anhand des Screenshots sieht man ganz schön, dass die Framerate von 61 auf 8 herunterfällt.
Weiß hier eventuell zufällig jemand, womit das zusammenhängt und wie man das eventuell beheben kann?
Der AnimationTimer wird über die Methode .start() und .stop() gestartet und gestoppt.

Liebe Grüße und Danke im Voraus :)
 
G

Gelöschtes Mitglied 65838

Gast
der thread kann in javafx nicht über 60 FPS standarmäßig ...beim aktivieren überforderst du schlichtweg dne Thread

glaub in awt und swing ist auch die 60er Limitation


wenn du aufwändig objekte erzeugst wie zb new imageview mit einer hohen auflösung kommt es schon mal zu rucklern da musst du halt an code verbesserungen arbeiten
 

Blender3D

Top Contributor
glaub in awt und swing ist auch die 60er Limitation
Über die Framerate in fx kann ich nichts sagen (Ich kann mir aber nicht vorstellen, dass fx da so schwache werte liefert ). Ich habe bereits Spiele in pure Java (Swing) geschrieben. Da sind wesentlich höhere Frameraten möglich.
Abhängig von :
1) Der Art wie der Gameloop programmiert ist. ( Ist einiges an know how nötig )
2) Der Aufwand der benötigten Berechnungen und Ausgaben des Spiels.
3) Der verwendeten Hardware.
4) Ob OpenGl aktiviert ist
Java:
System.setProperty("sun.java2d.opengl", "true");
 

Blender3D

Top Contributor
Wenn ich eine Grafik mit einer Geschwindigkeit von180 Pixel pro Sekunde in Richtung x bewegen will, brauche ich:
180 fps: dx = 1;
60 fps: dx = 3;
--> Die Grafik springt bei 60 fps nach jedem Bildaufbau 3 Pixel weiter sonst nur 1 Pixel.
--> Höhere Framerate ist flüssigere Bewegung.
An und für sich sind 60 fps ausreichend. Aber nicht wirklich gut.
 
G

Gelöschtes Mitglied 65838

Gast
league of legends, guild wars 2 , minecraft...nur um ein paar zu nennen die nicht höher als 60 fps gehen
 

Blender3D

Top Contributor
Ist das so ein Art Rollenspiel. Interessant wird die Framerate bei einfachen 2D Spielen. Zb ein weiser Ball der sich über eine schwarzen Hintergrund bewegt. Aufwendige Grafiken, die wie Filme ablaufen sind auch mit 30 Frames einigermaßen gut spielbar. Das Menschliche Auge nimmt 18-24 Bilder als flüssige Bewegung war. Obige weise Kugel auf schwarzen Hintergrund wir aber bei 60 Frames bei einer zu hohen Geschwindigkeit nicht mehr als flüssige Bewegung erkannt.
 

Blender3D

Top Contributor
Ja läuft filmmäßig ab. Die Framerate ist in dem Video nicht ersichtlich. Aber wie gesagt, durch die aufwendige Grafik wird einiges kaschiert bei niedrigen Frameraten. Schreib dir einen kleinen Gameloop mit weisem Ball auf schwarzen Hintergrund mit sehr hoher Geschwindigkeit.
Bewege ihn bei 30fps und mit 60 fps mit der selben Geschwindigkeit.
(60fps) dx = 1 (30fps) dx =2; ( 60 Pixel pro Sekunde )
Erhöhe die Geschwindigkeit so lange, bis sie bei 60 fps gerade noch flüssig ist.
Dann vergleiche die Bewegung mit 30 fps. (dx ist immer doppels so hoch ).
Du wirst bei 60 fps eine flüssige und bei 30 fps keine flüssige Bewegung mehr haben.
Natürlich lassen sich bei 60 fps brauchbare Spiele machen. Für gewisse Anforderungen kommt man damit halt an eine Grenze.
Bei Java Swing liegt diese Grenze aber weit höher.
 

MaggyMo

Aktives Mitglied
@MaggyMo hast du Code, mit dem man das nachstellen kann?
Hey,

ich habe mal eben ein Programm erstellt, mit dem man das Problem nachstellen kann. In diesem Fall fällt die Frametime auch.
Je länger man Stoppt, desto größer ist die Differenz der Frametime.
Nach einer gewissen Zeit "pendelt" sich die Frametime dann wieder ein.

package Test;

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application{
private final long[] frameTime = new long[60];
private int frameTimeIndex = 0;
private boolean arrayGefuellt = false;
AnimationTimer animationTimer;
double frameRate;

public static void main(String[]args) {
launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("FrameRate Test");
Button start = new Button("Animation Start");
Button stop = new Button("Stop");
start.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
animationStarten();
}
});

stop.setOnAction(new EventHandler<ActionEvent>(){

@Override
public void handle(ActionEvent arg0) {
if(stop.getText().equals("Stop")) {
stop.setText("Weiter");
animationTimer.stop();

}else {
stop.setText("Stop");
animationTimer.start();
}

}
});

FlowPane root = new FlowPane();
root.getChildren().addAll(start, stop);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();

}



public void animationStarten() {
animationTimer = new AnimationTimer() {

@Override
public void handle(long aktFrameRate) {
long alteFrameTime = frameTime[frameTimeIndex];
frameTime[frameTimeIndex] = aktFrameRate;
frameTimeIndex = (frameTimeIndex + 1) % frameTime.length;
if (frameTimeIndex == 0) {
arrayGefuellt = true;
}
if (arrayGefuellt) {
long elapsedNanos = aktFrameRate - alteFrameTime;
long elapsedNanosPerFrame = elapsedNanos / frameTime.length;
frameRate = 1_000_000_000.0 / elapsedNanosPerFrame;
System.out.println(frameRate);
}
}
};
animationTimer.start();
}


}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
J JavaFX CSS einbinden - Wieso will das einfach nicht!!! AWT, Swing, JavaFX & SWT 1
LexeB4F setValueAT geht nicht... wieso? AWT, Swing, JavaFX & SWT 14
Z JComponent's requestFocus() - Wieso nicht immer anwendbar? AWT, Swing, JavaFX & SWT 1
C Wieso nur erster Buchstabe bei Caesar-Entschlüsselung? AWT, Swing, JavaFX & SWT 2
A Swing JTable wird nicht über zurückegebene Referenz geaddet.Wieso nicht? AWT, Swing, JavaFX & SWT 5
K LayoutManager Wieso verschwinden Elemente? AWT, Swing, JavaFX & SWT 20
K Applet Wieso kann ich keine Array im Applet initialisieren AWT, Swing, JavaFX & SWT 13
propra Wieso wird paintComponent() beim Start 2 malausgeführt? AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Wieso wird das Bild nicht angezeigt ? AWT, Swing, JavaFX & SWT 4
T wieso leere Oberfläche? AWT, Swing, JavaFX & SWT 5
G Swing Wieso braucht man nach setVisible mal ein revalidate und mal nicht? AWT, Swing, JavaFX & SWT 8
C Wieso funktionert der CellRenderer nicht? AWT, Swing, JavaFX & SWT 2
L Wieso werden die Icons nicht dargestellt? AWT, Swing, JavaFX & SWT 2
W Wieso SerialVersionUID bei Swing-Komponenten AWT, Swing, JavaFX & SWT 5
N Freiraum in der GUI - Wieso? AWT, Swing, JavaFX & SWT 6
S Wieso Fenster im EDT sichtbar machen? AWT, Swing, JavaFX & SWT 43
M Wieso geht das nicht! AWT, Swing, JavaFX & SWT 3
S animation Flackern trotz doppelpufferung wieso? AWT, Swing, JavaFX & SWT 2
G Wieso wird meine Scrollbar nicht angezeigt? AWT, Swing, JavaFX & SWT 3
K JTable - wieso funktioniert der Autoscroll nicht? AWT, Swing, JavaFX & SWT 5
Paule JFrame bleibt leer, wieso? AWT, Swing, JavaFX & SWT 2
S Wieso werden die Bilder nicht angezeigt? AWT, Swing, JavaFX & SWT 4
G Progressbar aktualisiert sich nicht (vernünftig). WIESO? AWT, Swing, JavaFX & SWT 2
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
K GridBagLayout verändert die größe? AWT, Swing, JavaFX & SWT 1
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
J ComboBoxModel addElement verändert Layout AWT, Swing, JavaFX & SWT 8
X mouseover verändert ungewollt die farbe AWT, Swing, JavaFX & SWT 4
S g.setStroke verändert auch Buttonrahmen AWT, Swing, JavaFX & SWT 2
R JPanel-Größe verändert sich nicht. Warum? AWT, Swing, JavaFX & SWT 5
S Button (ActionListener) funktioniert nicht, wenn y-Koordinate verändert wird AWT, Swing, JavaFX & SWT 5
N Methode zum Prüfen ob Jtextfield verändert worden ist AWT, Swing, JavaFX & SWT 2
R Fensterinhalt erscheint erst, wenn das Fenster verändert wird AWT, Swing, JavaFX & SWT 7
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
S JScrollpane verändert sich? AWT, Swing, JavaFX & SWT 5
J Menü beschriftung wird nicht verändert AWT, Swing, JavaFX & SWT 7
V JTable - SelectionMode wird durch RowFilter verändert AWT, Swing, JavaFX & SWT 2
R LayoutManager GridLayout verändert isch andauernd AWT, Swing, JavaFX & SWT 4
hdi SWT Shell: Auslagerung von Code verändert Verhalten AWT, Swing, JavaFX & SWT 6
O JSlider - wie unterscheide ich mit Maus verändert und durch setValue verändert. AWT, Swing, JavaFX & SWT 16
J JComboBox verändert Größe sobald editierbar AWT, Swing, JavaFX & SWT 2
L GridLayout verändert festgesetzte Größe der Komponenten AWT, Swing, JavaFX & SWT 12
N Die Zeile einer JTable verändert beim klicken ihre Farbe? AWT, Swing, JavaFX & SWT 7
K Fenstergröße soll nicht verändert werden AWT, Swing, JavaFX & SWT 2
V JComboBox-Größe verändert sich im GridBagLayout AWT, Swing, JavaFX & SWT 4
Juelin Javafx hängt sich auf AWT, Swing, JavaFX & SWT 31
I JavaFX Programmcode pausieren gestaltet sich als schwierig AWT, Swing, JavaFX & SWT 7
N Dropshadow setzen bei einer Gruppe von Tiles, die sich jeweils in einer Stackpane befinden, welche in einer Gridpane angeordnet sind. AWT, Swing, JavaFX & SWT 0
berserkerdq2 Skalieren sich javafx objekte automatisch auf die Bildschirmgröße AWT, Swing, JavaFX & SWT 6
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
K Textarea aktuallisiert sich nicht, nach Auswahl (Itemlistener) AWT, Swing, JavaFX & SWT 3
S e(fx)clipse erscheint nicht im Marketplace, lässt sich nicht installieren AWT, Swing, JavaFX & SWT 16
A TableView updatet sich nicht AWT, Swing, JavaFX & SWT 3
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
J JOptionPane ruft sich selbst immer wieder neu auf AWT, Swing, JavaFX & SWT 3
P Swing Programm hängt sich bei Buttondruck auf? (GUI für "Chatbot" erstellen) AWT, Swing, JavaFX & SWT 15
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
R JOptionPane schließt sich nicht wieder AWT, Swing, JavaFX & SWT 2
R Textfield lässt sich nicht positionieren AWT, Swing, JavaFX & SWT 1
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
B Dynamische ListView-Größe, die bei Fenstergrößenänderung sich anpasst AWT, Swing, JavaFX & SWT 19
R Swing Komponente im JFrame überschreinen sich AWT, Swing, JavaFX & SWT 7
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
O showConfirmDialog öffnet sich nicht AWT, Swing, JavaFX & SWT 3
K JavaFX Fenstergröße ändert sich (Gluon - SceneBuilder) AWT, Swing, JavaFX & SWT 23
S JavaFX Scene öffnet sich nicht AWT, Swing, JavaFX & SWT 3
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
J ChangeListener verhält sich komisch AWT, Swing, JavaFX & SWT 14
S Ausgabe aktualisiert sich nur nach 2. Klick AWT, Swing, JavaFX & SWT 17
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
P Gui lässt sich nicht starten AWT, Swing, JavaFX & SWT 10
B JavaFX setOnMousePressed() - verhält sich wie setOnMouseClicked()? AWT, Swing, JavaFX & SWT 6
R JavaFX lässt sich nicht in Eclipse einbinden AWT, Swing, JavaFX & SWT 4
J BackgroundJPanel passt sich dem JFrame nicht an AWT, Swing, JavaFX & SWT 7
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
M 2D-Grafik Spielfigur bewegt sich nicht AWT, Swing, JavaFX & SWT 6
W Javafx - Image soll sich mit der Camera mitbewegen AWT, Swing, JavaFX & SWT 1
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
K JavFX: VBox.setVGrow stell sich quer AWT, Swing, JavaFX & SWT 2
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
S Swing Bedienelemente ordnen sich automatisch neu an AWT, Swing, JavaFX & SWT 2
B Hauptfenster öffnet sich mehrmals AWT, Swing, JavaFX & SWT 9
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
E Java FX ProgressIndicator dreht sich nicht AWT, Swing, JavaFX & SWT 8
P Swing JFrame minimiert sich bei Doppelklick auf die Titel-Leiste AWT, Swing, JavaFX & SWT 16
krgewb AWT JFrame soll sich wie Dialog verhalten AWT, Swing, JavaFX & SWT 9
D JavaFX Label lässt sich nicht mehrmals färben AWT, Swing, JavaFX & SWT 7
Prafy Sich ändernde Farbverläufe erstellen AWT, Swing, JavaFX & SWT 4
D JavaFX Anwendung hängt sich permanent auf AWT, Swing, JavaFX & SWT 6
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
T Swing Programm hängt sich auf! AWT, Swing, JavaFX & SWT 23
C LayoutManager Bei verkleinern des Fensters, verschieben sich JPanels übereinander. AWT, Swing, JavaFX & SWT 7
J Button vergrößert sich bei Fenster resize AWT, Swing, JavaFX & SWT 22
J Lohnt sich FX? AWT, Swing, JavaFX & SWT 2
Tort-E JavaFX ProgressIndicator dreht sich nicht AWT, Swing, JavaFX & SWT 2
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben