【发布时间】:2022-01-31 19:39:51
【问题描述】:
情况:坦克有一个Shot()方法和一个检查子弹发射后是否击中障碍物的代码。子弹飞上 X 坐标。 do...while 循环检查子弹可以在没有障碍物的情况下行进多远。之后,子弹飞行本身的动画通过TranslateTransition 进行。最后一个循环遍历所有游戏障碍并通过intersects检查联系,如果成功,则移除障碍。
do {
y = (int) (bulletObj.getImageBullet().getTranslateX() + register) / PlayField.BRICK_SIZE;
x = (int) bulletObj.getImageBullet().getTranslateY() / PlayField.BRICK_SIZE;
line = LevelData.LevelOne[x][y];
register += 1;
} while (line.equals("0"));
System.out.println(System.currentTimeMillis()); // 1643642047472 ms.
bulletTranslate = new TranslateTransition();
bulletTranslate.setFromX(bulletObj.getImageBullet().getTranslateX());
bulletTranslate.setToX(bulletObj.getImageBullet().getTranslateX() + register - 18);
bulletTranslate.setNode(bulletObj.getImageBullet());
bulletTranslate.setDuration(Duration.millis(register)); // Let register = 300 мs.
bulletTranslate.play();
System.out.println(System.currentTimeMillis()); // 1643642047474 ms.
bulletObj.getImageBullet().setTranslateX(bulletObj.getImageBullet().getTranslateX() + register - 18);
for (GameObject platform: PlayField.platforms) {
if (platform.getImage().getBoundsInParent().intersects(bulletObj.getImageBullet().getBoundsInParent()))
{
System.out.println(System.currentTimeMillis()); // 1643642047474 ms.
tankRoot.getChildren().remove(platform.getImage());
PlayField.platforms.remove(platform);
LevelData.LevelOne[x][y] = "0";
break;
}
}
一切都按预期进行,但只有一个问题。
问题在于移除障碍物的速度比动画子弹通过的速度快。
并且有必要在联系后同时删除它们。
如何解决问题?
拍摄前
射击后,物体在子弹飞行过程中消失了
P.S 抱歉,我用的是谷歌翻译。
【问题讨论】:
-
如果您想获得调试帮助,您需要提供minimal reproducible example。请仔细研究链接页面,您不应提供整个应用程序,而应提供仅复制问题并仅通过复制和粘贴即可编译和运行的内容。需要提供复制所需的所有资源,无论是图像还是替换形状像圆形的图像。