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