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

Libgdx-如何在单个视口中旋转屏幕?,libgdx,screen-rotation,scene2d,Libgdx,Screen Rotation,Scene2d,我已经在Libgdx中构建了一个游戏,它使用一个传入到一些屏幕(Splash/Intro/game/Menu/Pause等)的窗口 每个屏幕都有自己的包含演员组的舞台——我已经编写了一个自定义渲染循环,允许屏幕淡入/淡出、滑动或在彼此后面渲染——这一切都很棒 我现在想要一个“UI”屏幕,它可以在智能手机上旋转以匹配它们的方向(游戏中的所有其他东西都不会旋转) 通过在SpriteBatch上使用TransformMatrix,我可以直观地实现这一点,但这不会影响舞台的“触摸”检测(或debugdr

我已经在Libgdx中构建了一个游戏,它使用一个传入到一些屏幕(Splash/Intro/game/Menu/Pause等)的窗口

每个屏幕都有自己的包含演员组的舞台——我已经编写了一个自定义渲染循环,允许屏幕淡入/淡出、滑动或在彼此后面渲染——这一切都很棒

我现在想要一个“UI”屏幕,它可以在智能手机上旋转以匹配它们的方向(游戏中的所有其他东西都不会旋转)

通过在SpriteBatch上使用TransformMatrix,我可以直观地实现这一点,但这不会影响舞台的“触摸”检测(或debugdraw),而且似乎在舞台内无法实现这一点(LocalTopArentCords允许旋转和缩放,但不允许变换)

请记住,它不会是“正方形”(FitViewport强制执行16x9比率),因此它需要平移和旋转

注意:我曾试图搞乱相机,但这是错误的范例-相机是同一事物的不同视图-我希望不同的事物(变换和旋转)绘制到同一视图中


另外请注意:我已经开始创建自己版本的Screen/Stage类来实现这一点——我认为这可能比让现有代码正常工作要快,但如果我是第一个想要这样做的人,我会感到惊讶。

我想我已经解决了这个问题,退一步,看看Stage/Actor系统是如何工作的工作

旋转和变换整个舞台的想法充满了复杂性——我可以在SpriteBatch级别上做这件事,这让我分心,导致了大量的时间浪费——可悲的是

只有当我意识到,当我在计算我的所有UI(Actor)元素相对于屏幕中心或角落的位置时,我还可以进一步旋转并同时变换它们!我还意识到,对它们进行分组使这变得非常简单(事实上,我可以通过使用两个单独的组来获得静态和旋转元素!)

旋转/移动一个演员,当然,也会调整它的边框/触摸区域-所以我现在有了一个合适的舞台/团队/演员模型,随着设备的旋转而旋转-我可能只是静态信息(分数),或者甚至是一个动态菜单,或者是一个台球游戏中“提示”的覆盖物,或者其他什么


正如爱迪生所说——我没有浪费2天时间,我只是花了2天时间想出了大量我现在知道行不通的想法

使用libgdx真是太棒了,听起来好像你知道自己在做什么。这只是我的观点,但我不认为玩游戏的人需要特定的方向才能知道菜单屏幕可以旋转,即使他们知道他们可以旋转,他们也不会真正旋转。就我个人而言,我不会为这件事建立一个理由。不幸的是,我不知道你会怎么做。我会举例说明这个想法-你有一个自上而下的驾驶游戏,或者一个射击游戏,或者一个台球游戏,你会想要旋转设备来控制或者排列一个射击或者其他什么。游戏仍然锁定在手机方向,但用户界面(分数、分数、寿命、乘数或其他)将旋转以保持可读性-例如,你的分数保持在右上角,寿命保持在左下角等。这是我正在尝试做的事情(好吧-我确实在做,但不是与舞台/团体/演员一起)