JavaFX 8 - ImageViews的奇怪ParallelCamera行为

时间:2015-07-23 00:26:41

标签: java javafx javafx-8

我想用JavaFX 8创建一个小游戏。它基于'小行星',对于那些不知道的人:
小行星从窗户/屏幕的四周产生,你必须使用可在屏幕边框内自由移动的太空船进行射击。

我遇到了一个问题。要在屏幕通过外面时从屏幕上删除小行星,请检查它们是否在屏幕边框之外(x和y坐标:600x480)。 但现在我不能让它们在外面产生,以避免它们在屏幕上瞬间出现。

所以我考虑使用ParallelCamera并将其移动到x = 100和y = 100以创建一个100px宽的区域,在那里我可以产生小行星并将它们发送到屏幕的另一侧。

当我实施相机时,只有在我手动调整整个窗口大小或更新相机翻译后才会显示图像。如果没有将相机设置到特定位置,一切都按预期工作。我的目标是在屏幕上获取图像,而不必调整整个窗口的大小......

奇怪的是,正确显示了一个矩形,但ImageView却没有。

我无法发布图片所以我必须描述它们:
1.没有修改过的译文(x / y坐标)的没有ParallelCamera / ParallelCamera:
一切都按预期工作。绿色矩形和代表玩家的小型18x18图像 2. ParallelCamera的X和Y设置为100:
仍然可以看到绿色矩形,但没有玩家形象。手动调整窗口大小或再次更改ParallelCamera的X和Y后,图像将显示在屏幕上的预期位置。

我尝试了所有我能想象的东西,差不多有400人访问了一个关于它的论坛帖子(到目前为止没有答案)。

代码: http://pastebin.java-gaming.org/8d79c3d193319

1 个答案:

答案 0 :(得分:0)

好的,几个小时后我找到了一个解决方案: 使用camera.setTranslateX,camera.relocate(var1,var2)移动/平移ParallelCamera似乎会破坏某些内容,因为当您例如将图像转换为相机时,图像会被切断。在setTranslateX()中使用一个小数字。

此外,似乎我根本不需要使用ParallelCamera,我可以在负x和y坐标上产生这些小行星并让它们飞来飞去。

最后最好的事情: 在场景图的根节点(在我的例子中是一个Group节点)上使用setLayoutX / Y(可能还有setTranslateX / Y)几乎可以实现我想用camera.setTranslateX / Y获得的结果。 这两者之间的区别如下: root.setLayoutX(100)通过向所有节点添加100向右移动每个x坐标100个单位,而camera.setTranslateX(100)将眼睛向右移动100个单位而不改变坐标。

TL; DR:我不知道我可以设置消极坐标来解决我的问题。好吧,我今天学到了很多......关于坐标。