Java 不断检查子弹是否触及节点

Java 不断检查子弹是否触及节点,java,javafx,Java,Javafx,我有一个非常简单的程序,你可以用你的W,a, S、 D和空格键进行拍摄。所有的拍摄和移动动画都可以工作,但我不确定如何实现一个系统,在这个系统中,程序不断地检查子弹是否碰到了一个节点,比如一个圆 我想我可以用一个ArrayList来存储所有的项目符号,然后用TimerTask来检查项目符号是否接触到一个节点;但我觉得这会减慢程序的速度,而且子弹可能会在TimerTask等待再次启动时通过它们 任何建议都会有帮助 代码: 你需要的是每次在游戏中画一个框架时检查碰撞的东西。计时器将在一个单独的线程中

我有一个非常简单的程序,你可以用你的W,a, S、 D和空格键进行拍摄。所有的拍摄和移动动画都可以工作,但我不确定如何实现一个系统,在这个系统中,程序不断地检查子弹是否碰到了一个节点,比如一个圆

我想我可以用一个
ArrayList
来存储所有的项目符号,然后用
TimerTask
来检查项目符号是否接触到一个节点;但我觉得这会减慢程序的速度,而且子弹可能会在
TimerTask
等待再次启动时通过它们

任何建议都会有帮助

代码:


你需要的是每次在游戏中画一个框架时检查碰撞的东西。计时器将在一个单独的线程中运行,该线程可以工作,但与游戏同步要困难得多。

一般来说,当你必须用OO语言“不断观察”某个东西时,最好的解决方案是使用。

您可以检查
项目符号是否与
其他
交叉使用,以自定义方式提供给每个相关项目。下面的片段为
shoot()
添加了一个
插值器,但每个方向都需要一个相同的插值器。实现是线性的,只是返回
t
不变,但您也可以查看抛物线插值器。我还制作了
other
类变量,可供
shoot()
访问。我毫不迟疑地向空中发射了一打子弹。请注意,您不需要
start
值:“将使用播放动画时当前的目标值。”

private Circle other = new Circle(100, 100, 10);
…
else {
    KeyValue end = new KeyValue(bullet.translateYProperty(), -800, new Interpolator() {
        @Override
        protected double curve(double t) {
            if (!Shape.intersect(bullet, other).getBoundsInLocal().isEmpty()) {
                System.out.println("Intersection");
            }
            return t;
        }
    });
    KeyFrame endF = new KeyFrame(Duration.seconds(10), end);
    timeline.getKeyFrames().addAll(endF);
}

您可以使用在每一帧上执行代码,因为每一帧只调用一次
handle()
方法。类似地,在
时间线中,将定期调用自定义
插值器,如图所示。
private Circle other = new Circle(100, 100, 10);
…
else {
    KeyValue end = new KeyValue(bullet.translateYProperty(), -800, new Interpolator() {
        @Override
        protected double curve(double t) {
            if (!Shape.intersect(bullet, other).getBoundsInLocal().isEmpty()) {
                System.out.println("Intersection");
            }
            return t;
        }
    });
    KeyFrame endF = new KeyFrame(Duration.seconds(10), end);
    timeline.getKeyFrames().addAll(endF);
}