Java 如何创建每0.1秒运行一次的excecutable,并向其中传递一个数组
我在做游戏。 我创建了一个包含所有形状的数组。 我需要每0.1秒移动一次形状或一些小的东西。 同时我也有一个圆圈跟着我的鼠标。 我需要能够移动圆圈跟随我的鼠标所有的时间,但我还没有找到一种方法来移动其他圆圈一点点每秒。 当我尝试移动其他圆圈时,它们都会在javaFX窗口加载之前立即移动 这是我的阵列Java 如何创建每0.1秒运行一次的excecutable,并向其中传递一个数组,java,scheduledexecutorservice,Java,Scheduledexecutorservice,我在做游戏。 我创建了一个包含所有形状的数组。 我需要每0.1秒移动一次形状或一些小的东西。 同时我也有一个圆圈跟着我的鼠标。 我需要能够移动圆圈跟随我的鼠标所有的时间,但我还没有找到一种方法来移动其他圆圈一点点每秒。 当我尝试移动其他圆圈时,它们都会在javaFX窗口加载之前立即移动 这是我的阵列 ArrayList<Shape> Objects = new ArrayList<Shape>(); Circle I = ClassObjects.getCircle(r
ArrayList<Shape> Objects = new ArrayList<Shape>();
Circle I = ClassObjects.getCircle(randomWidth,randomX,randomY);
Objects.add(I);
我创建一个圆并将其添加到我的形状数组中
ArrayList<Shape> Objects = new ArrayList<Shape>();
Circle I = ClassObjects.getCircle(randomWidth,randomX,randomY);
Objects.add(I);
但我发现这是一个可运行的executor服务,因此无法传递任何返回值,也无法传递数组
我试着研究callable executor服务,但我不明白如何编写代码
如果有人能给我一个每0.1秒运行一次的可执行文件的示例,并且可以将我的形状数组列表传递给它,这样它就可以被修改,然后返回
非常感谢。使用
TimerTask
是可能的。扩展TimerTask
如:
class CustomTimerTask extends TimerTask {
List<Shape> shapes;
public CustomTimerTask(List<Shape> shapes, /* observers*/) {
this.shapes = shapes;
}
@Override
public void run() {
// update shapes
// notify( about mouse events or whatever)
}
}
有关示例,请参见Oracle教程中的使用
否则,您可以使用
您不需要将数组传递给Timeline或AnimationTimer,因为节点将存储在场景图中,您可以直接从Timeline或AnimationTimer事件处理代码中操纵场景图节点
例如,要创建每0.1秒处理一次的时间线:
final Timeline timeline = new Timeline();
timeline.setCycleCount(Animation.INDEFINITE);
timeline.getKeyFrames().add(
new KeyFrame(Duration.millis(100)),
new KeyValue(node.translateXProperty(), 25))
);
timeline.play();
请注意,JavaFX中的帧速率默认为每秒60帧。因此.1秒的时间线不会精确地调用每个.1秒
还涉及:
final Timeline timeline = new Timeline();
timeline.setCycleCount(Animation.INDEFINITE);
timeline.getKeyFrames().add(
new KeyFrame(Duration.millis(100)),
new KeyValue(node.translateXProperty(), 25))
);
timeline.play();