我试图在JavaFX(Scorched earth)中为我的游戏制作动画。我被告知,因为我不使用游戏循环,最好的方法是使用插补器进行自定义转换,但在观看了javadoc之后我似乎无法弄明白。这是射击的子弹
public void shootBullet(int angle, int v0, double wind) throws ArtilleryException {
try {
double speed = v0;
Tank playerTank = GamePresenter.getPlayers()[0].getTank();
xValues.clear();
yValues.clear();
double cornerRadians = Math.toRadians(angle);
double endX = GameView.CANVAS_WIDTH;
for (int x = 0; x < endX - playerTank.getPosX(); x++) {
int y = (int) (-G / 2 / pow((speed * cos(cornerRadians) - wind), 2) * pow((x), 2) + (x) * sin(cornerRadians) / (cos(cornerRadians) - wind / speed) + playerTank.getPosY());
if (x + playerTank.getPosX() + Tank.getWIDTH() < GameView.CANVAS_WIDTH) {
xValues.add(x + playerTank.getPosX() + Tank.getWIDTH());//
yValues.add(-y + (playerTank.getPosY() + playerTank.getPosY()) - Tank.getHEIGHT() / 2);
}
}
} catch (NumberFormatException e) {
throw new ArtilleryException("Couldn't shoot");
}
}
我基本上要做的是通过xValues列表和yValues列表上的动画显示图像。 有人可以给我一些关于如何填写公共空间插值(双重压裂)方法的基本指导原则吗?
答案 0 :(得分:1)
为什么不使用PathTransition而不是构建自己的PathTransition。从x,y坐标中,您可以轻松创建Path对象,然后可以使用PathTransition在此路径上为ImageView设置动画。
答案 1 :(得分:0)
解决方案:我决定改用PathTransition
private PathTransition makePathTrans(List<Integer> xCor, List<Integer> yCor) {
view.getPath().getElements().clear();
view.getPath().getElements().add(new MoveTo(xCor.get(0), yCor.get(0)));
for (int i = 0; i < xCor.size(); i++) {
view.getPath().getElements().add(new LineTo(xCor.get(i), yCor.get(i)));
}
PathTransition pthTrans = new PathTransition(Duration.seconds(2), view.getPath(), view.getBullet());
pthTrans.setCycleCount(1);
pthTrans.setInterpolator(Interpolator.LINEAR);
pthTrans.setAutoReverse(false);
return pthTrans;
}
//in my presenter
view.getBullet().setVisible(true);
PathTransition shot = makePathTrans(xCor, yCor);
shot.play();