使用转换和插值器让图像遍历2个坐标列表

时间:2016-03-17 17:05:57

标签: java animation javafx-8 interpolation

我试图在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列表上的动画显示图像。 有人可以给我一些关于如何填写公共空间插值(双重压裂)方法的基本指导原则吗?

2 个答案:

答案 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();