微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用并行相机 javafx

如何解决如何使用并行相机 javafx

作为学校项目,我们正在制作爬坡赛车的小副本。 我们不想让路线本身移动,而是想使用相机,但是一旦我们将相机添加到我们的场景中,它就像切断了我们的图像,当我向右移动时,只有空白区域而不是我们的路线。 你们中有人知道如何在 javafx 中使用并行相机吗?

我们正在使用 javafx 类 javafx.scene.ParallelCamera。

这是我们的游戏场景


import GameLogic.*;
import GameLogic.KeyEventHandler;
import GameLogic.MouseEventHandler;
import common.BaseScene;
import common.FancyAnimationTimer;
import common.Initializable;
import common.Navigator;
import gameobjects.Course;
import javafx.scene.ParallelCamera;

public class GameScene extends BaseScene implements Initializable {

    private Road road;
    private FancyAnimationTimer animationTimer;
    private Course courseMaker;
    private KeyEventHandler keyEventHandler;
    private ParallelCamera camera;

    public GameScene(Navigator navigator) {
        super(navigator);
    }

    @Override
    public void onInitialize() {

        keyEventHandler = new KeyEventHandler();

        courseMaker = new Course();


        camera = new ParallelCamera();
        camera.setLayoutX(0);
        camera.setLayoutY(0);
        camera.setNearClip(0.1);
        camera.setFarClip(2000.0);

        this.setCamera(camera);

        road = new Road(navigator,() -> animationTimer.stop(),keyEventHandler,camera);

        MouseEventHandler mouseEventHandler = new MouseEventHandler(road);
        CollisionHandler  collisionHandler = new CollisionHandler(road);

        CourseBoundingBox courseBoundingBox = new CourseBoundingBox();
        this.setonMouseClicked(mouseEventHandler);
        this.setonKeypressed(keyEventHandler::onKeypressed);
        this.setonkeyreleased(keyEventHandler::onkeyreleased);
        road.load();
        animationTimer = new FancyAnimationTimer() {
            @Override
            protected void doHandle(double elapsedtime) {
                road.update(elapsedtime,courseMaker);
                road.draw(canvas.getGraphicsContext2D(),courseMaker);
                courseBoundingBox.draw(canvas.getGraphicsContext2D());
            }
        };
        animationTimer.start();
    }

}

这是我们的课程


import gui.Images;
import javafx.scene.canvas.GraphicsContext;

public class Course {
    private double x = 0;
    private double y = -360;
    private int carSpeed = 0;
    private int carTopSpeed = 1000;
    private int inputRightPressCounter = 0;
    private int inputLeftPressCounter = 0;
    private int topSpeedDifference = 0;

    public void setX(double x) {
        this.x = x;
    }

    public void drawCourse(GraphicsContext gc) {
        double imageWidth = Images.COURSEPART1.getWidth();
        gc.drawImage(Images.COURSEPART1,x,y,6030,1440);
       gc.drawImage(Images.COURSEPART2,x + imageWidth,y);
       gc.drawImage(Images.COURSEPART3,x + 2 * imageWidth,y - 9);
       gc.drawImage(Images.COURSEPART4,x + 3 * imageWidth,y + 12);
       gc.drawImage(Images.COURSEPART5,x + 4 * imageWidth,y + 12);
       gc.drawImage(Images.COURSEPART1,x + 5 * imageWidth,y);
       gc.drawImage(Images.COURSEPART2,x + 6 * imageWidth,y);
        gc.drawImage(Images.COURSEPART3,x + 7 * imageWidth,y - 9);
        gc.drawImage(Images.COURSEPART4,x + 8 * imageWidth,y + 12);
        gc.drawImage(Images.COURSEPART5,x + 9 * imageWidth,y + 12);
    }
} 

这就是我们的道路更新方法

        physicWorld.update(elapsedtime);
        if(keyEventHandler.isInputRight()){
            gameCar.driveRight();
            camera.setLayoutX(gameCar.getTransform().getTranslationX());
        }
        if(keyEventHandler.isInputLeft()) {
            gameCar.driveLeft();
            camera.setLayoutX(gameCar.getTransform().getTranslationX());
        }
    }

这是我第一次在 stackoverflow 上提问,如果您对我以后的问题有一些建议,请告诉我 :)

感谢您的帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。