如何在JavaFX游戏中跟随玩家创建视图?

时间:2016-04-25 19:01:31

标签: java javafx

我正在尝试在JavaFX中制作我的第一个游戏,其中玩家对象(不是节点)将在一个级别内移动。但是,窗口内不应显示完整级别,只有播放器周围的一部分应该是。我已经搜索了相当多的解决方案,这与我完成项目的方式一致,但没有成功。以下代码描述了我如何设置GUI:

private VBox appRoot;
private Pane gameRoot;
private Canvas canvas;
private GraphicsContext gc;
private HBox uiRoot;

这是我使用的不同窗格。 appRoot按顺序包含gameRoot和uiRoot。 gameRoot包含画布。关卡中的所有内容(包括关卡本身)都会绘制到画布上,如下所示:

canvas = new Canvas(ROOM_WIDTH, ROOM_HEIGHT);
gc = canvas.getGraphicsContext2D();
createLevel(ROOM_WIDTH, ROOM_HEIGHT, CELL_WIDTH, CELL_HEIGHT);
gc.scale(2, 2);
drawLevel(gc, ROOM_WIDTH, ROOM_HEIGHT, CELL_WIDTH, CELL_HEIGHT);
player.render(gc);

createLevel和drawLevel只是创建一个级别并绘制不同块应该是的方块。玩家对象的渲染方法在其x坐标和y坐标处绘制玩家。正如你所看到的,我已经缩放了画布,所以到目前为止,游戏开始时并没有显示整个关卡。

问题是我无法做到这一点,窗口中显示的是播放器对象周围的事物。我见过一些使用方法setLayoutX和setLayoutY的代码,但我一直无法重现它以便它可以工作。

如果有人能帮我解决这个问题,我将非常感激,希望不要过多地改变绘图方式。

谢谢! :)

此外,这里有两张图片展示了它的外观;第一个是当玩家不在当前视图中时,第二个是视图中的玩家。

Image without player in view

Image with player in view

1 个答案:

答案 0 :(得分:0)

请勿直接显示Canvas以显示关卡。相反,您可以使用代表您的关卡的图片,然后将图片放在ImageView中。在ImageView上,您可以定义可见图像区域的视口。

要获取图像,您可以使用Canvas节点拍摄快照(请参阅此question)。这可能是你拥有的最简单的方法。或者你可以完全放弃Canvas并绘制图像。如果级别是预定义的(并且不是在运行时生成的),这似乎是最好的方法,那么您可以将图像作为资源与代码一起提供。