Libgdx - 如何在单个视口中旋转屏幕?

时间:2014-10-01 20:10:46

标签: libgdx screen-rotation scene2d

我在Libgdx中构建了一个游戏,它使用一个FitViewport传入某些屏幕(Splash / Intro / Game / Menu / Pause等)。

每个屏幕都有自己的舞台,包含演员组 - 我写了一个自定义渲染循环,允许屏幕淡入/淡出或滑动或互相渲染 - 这一切都很棒。

我现在想要一个'UI'屏幕,它将在智能手机上旋转以匹配他们的方向(游戏中的其他所有内容都不会旋转)。

我可以通过在SpriteBatch上使用TransformMatrix来直观地进行此工作,但这不会影响舞台的“触摸”检测(或调试绘图),并且似乎无法在舞台内执行此操作(localtoparentcoords允许旋转和规模,但不转变)

请记住它不会是'方形'(FitViewport强制执行16x9比例)所以它需要翻译和旋转......

注意:我试图搞砸相机,但这是错误的范例 - 相机是对同一事物的不同看法 - 我想要在同一视图中绘制不同的东西(转换和旋转)!

另请注意:我已经开始创建自己的Screen / Stage类版本 - 我认为它可能比将现有代码正常运行更快但我会惊讶于我是第一个想要这个的人?

1 个答案:

答案 0 :(得分:2)

我想通过稍微退一步看看舞台/演员系统如何运作来解决这个问题。

旋转和转换整个舞台的想法充满了复杂性 - 我可以在SpriteBatch级别上做这件事分散注意力,导致大量浪费时间 - 遗憾的是。

只有当我意识到当我计算所有UI(Actor)元素相对于屏幕中心或角落的位置时,我还可以采取进一步旋转和转换它们的步骤。时间!我也意识到将它们分组,使得这非常简单(事实上,我可以通过使用2个独立的组来实现静态和旋转元素!)

旋转/移动一个角色当然也会调整它的边界框/触摸区域 - 所以我现在有一个适当的舞台/组/演员模型随着设备的旋转而旋转 - 我可以只是静态信息(分数),甚至是动态菜单或“cue”的叠加层。在游泳池游戏或其他什么......

正如爱迪生所说 - 我没有浪费2天,我只花了2天时间提出了大量的想法,我现在知道这些想法都不起作用了!