提问者:小点点

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


我正在尝试用JavaFX(焦土)为我的游戏制作动画镜头。有人告诉我,因为我不使用gameloop,最好的方法是使用插值器进行自定义转换,但是在观看了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");
        }
    }

我基本上想做的是通过xValue列表和yValue列表上的动画显示图像。有人能给我一些关于如何填写公共无效插值(双压裂)方法的基本指南吗?


共2个答案

匿名用户

你为什么不直接使用PathTranpse而不是构建你自己的。从你的x、y坐标,你可以很容易地创建一个Path对象,然后你可以使用PathTranplace沿着这个路径为ImageView设置动画。

匿名用户

解决方案:我决定使用路径转换

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