如何解决如何使用并行相机 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 举报,一经查实,本站将立刻删除。