Libgdx - 如何在一个视口内旋转屏幕?

3
我在Libgdx中建立了一个游戏,其中传递了一个单一的FitViewport到一些屏幕中(闪屏/介绍/游戏/菜单/暂停等)。
每个屏幕都有它自己的舞台,其中包含演员的群组。我编写了一个自定义渲染循环,以允许屏幕淡入淡出、滑动或在彼此后面呈现-这很棒。
我现在想要一个“UI”屏幕,它会随着智能手机的方向旋转(游戏中的其他所有内容都不会旋转)。
我可以通过在SpriteBatch上使用TransformMatrix来实现视觉效果,但这并不影响Stage的“触摸”检测(或debugdraw),似乎没有一种方法可以在Stage内部实现这一点(localtoparentcoords允许旋转和缩放,但不允许进行变换)。
请注意,它将不是“正方形”(FitViewport强制16x9比率),因此需要平移和旋转...
注意:我已经尝试过调整相机,但那是错误的范例-相机是同一事物的不同视图-我想要在同一视图中绘制不同的东西(变换和旋转)!
另请注意:我已经开始创建自己的版本来实现屏幕/舞台类-我认为这可能比使现有代码正常工作更快,但如果我是想要这个功能的第一个人,我会感到惊讶?

使用libgdx非常棒,而且听起来你知道自己在做什么。这只是我的意见,但我不认为玩一个需要特定方向的游戏的人甚至知道菜单屏幕可以旋转,更不用说他们实际上旋转了,即使他们知道他们可以。就我个人而言,我不会为此建立一个案例。不幸的是,我不知道你该如何做到这一点。 - Kai Qing
我来阐述一下这个想法——你有一个自上而下的驾驶游戏、射击游戏或者台球游戏,你希望旋转设备来控制或对准目标等。游戏仍然锁定在手机的方向上,但是UI(得分、积分、生命值、倍数等)会旋转以保持可读性——例如,你的得分仍然在右上角,生命值在左下角等等。这就是我正在尝试做的事情(好吧——实际上我正在做,但目前不是用Stage/Group/Actors)。 - user834595
1个回答

2

我认为通过退后一步,看看舞台/演员系统的工作方式,我已经在某种程度上解决了这个问题。

旋转和变换整个舞台的想法充满了复杂性-我可以在SpriteBatch级别做到这一点,但这是一个分散注意力的因素,导致了很多浪费时间的情况-可悲的是。

只有当我意识到,我正在计算所有UI(Actor)元素相对于屏幕中心或角落的位置时,我可能会同时旋转和变换它们!我还意识到将它们分组,使这个过程非常简单(事实上,我可以使用2个单独的组来实现静态和旋转元素!)

旋转/移动Actor当然也会调整它的边框/触摸区域-因此我现在拥有一个适合旋转设备的舞台/组/演员模型-它可以是静态信息(得分),甚至可以是动态菜单或游泳池游戏中的叠加物或“提示”...

正如爱迪生所说-我没有浪费两天,我只是花了两天时间提出了许多我现在知道行不通的想法!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接