如何使用并行照相机javafx

8tntrjer  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(220)

作为学校的一个项目,我们正在做一个爬山比赛的小复制品。我们不想让球场本身移动,我们想使用一个摄像头,但一旦我们添加一个摄像头到我们的场景,它就像切断了我们的图像,当我移动到右边,只有空白,而不是我们的球场。你们中有人知道如何在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上问一些问题,如果你对我以后的问题有什么建议,请告诉我:)
谢谢你的帮助

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题