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