Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在ImageView节点上使用AnimationTimer和setTranslate会产生抖动运动?_Java_Android_Animation_Javafx_Imageview - Fatal编程技术网

Java 为什么在ImageView节点上使用AnimationTimer和setTranslate会产生抖动运动?

Java 为什么在ImageView节点上使用AnimationTimer和setTranslate会产生抖动运动?,java,android,animation,javafx,imageview,Java,Android,Animation,Javafx,Imageview,我的目标是使用JavaFX库创建一个基本的2D游戏。我的子目标是创造反应灵敏的控制和角色的平稳移动。我的问题是,当我在游戏(ImageView节点)上使用setTranslate时,它的玩家有点不稳定。它似乎每一秒钟都在不停地运动。这篇文章中包括了一个例子。我做过研究,但我得到了相互矛盾的答案。。。例如,一个人告诉我使用一个可写映像(因为他说它类似于BuffereImage),但这似乎并没有解决jerkynes问题。任何帮助都将不胜感激 更新:感谢您的回复。我发现了问题所在。我使用了一个名为f.

我的目标是使用JavaFX库创建一个基本的2D游戏。我的子目标是创造反应灵敏的控制和角色的平稳移动。我的问题是,当我在游戏(ImageView节点)上使用setTranslate时,它的玩家有点不稳定。它似乎每一秒钟都在不停地运动。这篇文章中包括了一个例子。我做过研究,但我得到了相互矛盾的答案。。。例如,一个人告诉我使用一个可写映像(因为他说它类似于BuffereImage),但这似乎并没有解决jerkynes问题。任何帮助都将不胜感激

更新:感谢您的回复。我发现了问题所在。我使用了一个名为f.lux的程序,它可以根据一天中的时间自动调整屏幕亮度,出于某种原因,它极大地影响了游戏的性能

package pleasehelp;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;

import javafx.stage.Stage;

public class PleaseHelp extends Application {

    ImageView imageView;

    public void start(Stage stage) {

        Pane root = new Pane();

        Scene scene = new Scene(root, 800, 200);

        stage.setTitle("Please Help!");

        stage.setScene(scene);

        Animation animation = new Animation(this);

        Image image = new Image("http://lessonpix.com/drawings/192/100x100/Gray+Square.png");
        imageView = new ImageView();
        imageView.setImage(image);
        root.getChildren().add(imageView);
        animation.start();

        stage.show();

    }

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

}

package pleasehelp;

import javafx.animation.AnimationTimer;

public class Animation extends AnimationTimer {

    PleaseHelp please;

    Animation(PleaseHelp please) {
        this.please = please;
    }

    @Override
    public void handle(long now) {
        please.imageView.setTranslateX(please.imageView.getTranslateX() + 1);
    }

    public void start() {
        super.start();
    }

    public void stop() {
        super.stop();
    }

}

在编写这样的动画时,通常最好根据给定的时间(现在很长)计算下一个位置,而不仅仅是向当前位置添加常量值。这将使您的动画更具预测性。

这对我来说很好。您在什么平台/操作系统上运行此功能?Windows 10、Java 8 131。我没有最快的电脑:AMD83504GHz,8GB和RadeonR7200。让我们假设抖动是由硬件或代码本身之外的东西造成的。。。有没有更好的方法在Java中为一个简单的2D游戏创建运动?如果没有,我想我会继续比赛。这种抽搐是微妙的,但我看到了。每隔5-1秒左右。是否有一种方法可以将60 FPS从AnimationTimer更改为更高的速度以进行测试?谢谢你的回复。动画定时器可能是最好的方法。