java - 如何使用并行相机javafx
问题描述
作为学校的一个项目,我们正在制作一个爬山赛车的小副本。我们不想让课程本身移动,而是使用相机,但是一旦我们将相机添加到我们的场景中,它就像切断我们的图像一样,当我向右移动时,只有空白区域而不是我们的课程。你们中有人知道如何在 javafx 中使用 Parallel Cameras 吗?
我们正在使用 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 上问一些问题,如果您对我未来的问题有一些提示,请告诉我:)
谢谢你的帮助
解决方案
推荐阅读
- javascript - 使用用户输入更改或更新复选框值
- python - 我无法使用 python 删除列表中的重复行
- java - 登录时可以创建表抛出 MS SQL 管理工作室,但不能通过 jdbc 与同一用户
- php - WP SMTP 插件未读取 wp-config 常量变量
- r - 如何找到一天呈现超过 6 小时的 MacId
- javascript - React Native - 使用获取数组
- multithreading - 堆栈溢出并行更新一个 RT 索引
- matlab - 有向矩阵到无向矩阵
- java - 如何从代理服务器后面的 Java 应用程序访问 Microsoft Graph Java API?
- asterisk - atersik waitexten 没有选择 默认