使用JavaFX 8移动节点时出现奇怪的帧速率下降

时间:2014-12-21 01:06:06

标签: java javafx-2 javafx-8 frame-rate

通过从JDK 7切换到JDK 8(从JavaFx 2到8),我遇到了一种奇怪的行为。 我对JavaFX很陌生,我试图制作一个简单的游戏来尝试它。

我使用 AnimationTimer 进行游戏循环,我通过设置其translateX和Y来移动矩形,具体取决于从 long now 值计算的增量值。处理方法。

使用Javafx 2时我没有遇到任何问题,其中delta的长度约为16 ms,并且运动流畅。 然后我意识到我没有使用JDK 8,并且在切换之后,delta出现了一个小问题。

每差不多20帧, delta达到32 ms ,然后矩形移动到那个点,这在屏幕上非常明显,就像矩形有点摇晃一样

我尝试过使用 TimeLine 或我自己的线程(使用Platform.RunLater()),但我遇到了同样的问题。 使用setChache(true)和setCacheHint(CacheHint.SPEED)似乎也没有改变它。

我还在另一台PC上尝试过它,它在Linux上使用JDK 8,它似乎没有这个问题......

我有带有ATI Radeon R9 270的Windows 7 x64(如果重要的话) 我正在使用Netbeans。

下面是一个简单的完整示例,我从左向右移动一个矩形。你应该(?)通过在JDK 8下运行它来看到奇怪的掉落。

我真的不知道自己是否做了一些我不应该做的事情,但这个例子很简单,所以如果你可以开导我或尝试一下并告诉我你是否得到了同样的,这真的很棒。

提前致谢。

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.scene.CacheHint;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main extends Application {

    private long previous;

    @Override
    public void start(Stage primaryStage) {

        Pane root = new Pane();
        Scene scene = new Scene(root, 800, 600);

        final Rectangle r = new Rectangle(0, 200, 50, 50);
//        r.setCache(true);
//        r.setCacheHint(CacheHint.SPEED);

        root.getChildren().add(r);

        final AnimationTimer at = new AnimationTimer() {
            @Override
            public void handle(long now) {
                if (previous != 0) {
                    final long delta = (now - previous) / 1000000;
                    r.setTranslateX(r.getTranslateX() + delta * 0.2);
                    System.out.println(delta);
                }
                previous = now;
            }
        };            
        primaryStage.setTitle("Moving test");
        primaryStage.setScene(scene);
        primaryStage.show();

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

0 个答案:

没有答案