使用过渡和插值器让图像经过 2 个坐标列表



我正在尝试在JavaFX(焦土)中为我的游戏制作动画。有人告诉我,由于我不使用游戏循环,最好的方法是使用插值器进行自定义过渡,但在观看了 javadocs 之后,我似乎无法弄清楚。这是被击中的子弹

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

为什么不直接使用 PathTransition 而不是构建自己的 PathTransition。从 x,y 坐标,您可以轻松创建 Path 对象,然后可以使用 PathTransition 沿此路径对 ImageView 进行动画处理。

解决方案:我决定改用 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();

最新更新