PlayN iOS横向模式

Posted

技术标签:

【中文标题】PlayN iOS横向模式【英文标题】:PlayN iOS Landscape mode 【发布时间】:2012-10-15 09:35:39 【问题描述】:

我的游戏仅适用于横向(屏幕分辨率 1024*768 - iPad 分辨率)。

我的游戏场景在 PlayN 支持的每个平台(androidhtml 等)上都能正确渲染。仅 ios 的问题。

我已经准备好iPad屏幕分辨率的所有资源,设置info.plist文件,使用IOSPlatform.register(app, IOSPlatform.SupportedOrients.LANDSCAPES);注册平台

当我运行我的应用程序时,有关设备方向的所有内容都是正确的,但游戏场景并未完全呈现。它以 768*768 分辨率渲染(并非所有场景对象都可见 - 只有属于 768*768 rect 的对象可见),剩余屏幕空间为黑色。

我已通过以下方式调查了该问题:

    对 rootLayer 应用缩放变换(以确保渲染整个场景)。 PlayN.graphics().rootLayer().setScale(0.75f, 0.75f); 结果 - 游戏场景适合 768*768 矩形,我可以看到所有游戏场景对象。 将平移变换应用到 rootLayer(以确保 PlayN 不会渲染 768*768 矩形之外的场景)。 PlayN.graphics ().rootLayer().setTranslation(1024.0f - 768.0f, 0.0f); 结果 - 游戏场景被翻译,但不属于 768*768 屏幕矩形的对象不可见。

我的猜测是 PlayN 为 768*1024 屏幕分辨率(默认 iPad 方向分辨率)准备其绘图上下文。当它渲染屏幕时,位于 768*1024 矩形之外的对象被剪裁(不渲染)。

非常感谢任何可能导致这种奇怪行为的帮助或想法。

谢谢!

【问题讨论】:

【参考方案1】:

问题出在以下几点:

iOS 不会在设备旋转后更改主窗口框架和根视图框架(而 Android 会 - 我已经检查过)。 PlayN 代码要求旋转后的视图大小应从 768*1024(默认方向)更改为 1024*768。

实际结果:PlayN 使用变换矩阵变换游戏场景,但不改变 OpenGL 帧缓冲区大小(帧缓冲区大小仍为 768*1024)

我已通过将下一段代码添加到 IOSGLContext 来解决此问题:

@Override
public void setSize (int width, int height)

    if (UIDeviceOrientation.LandscapeLeft == orient || UIDeviceOrientation.LandscapeRight == orient)
    
        Console.WriteLine("Swap IOSGLContext width and height for " + UIDeviceOrientation.wrap(orient));
        viewWidth = height;
        viewHeight = width;
    
    else
    
        viewWidth = width;
        viewHeight = height;
    
    super.setSize(viewWidth, viewHeight);

现在一切正常!

如果您对如何解决此问题有任何其他想法,我很乐意与您讨论)

谢谢!

【讨论】:

【参考方案2】:

下载最新的 PlayN-1.5 快照(来自 -> https://github.com/threerings/playn 不是来自谷歌代码)。该版本已修复此问题

【讨论】:

以上是关于PlayN iOS横向模式的主要内容,如果未能解决你的问题,请参考以下文章

在横向模式下制作 iOS 应用

AS3 - 仅 iOS 强制横向模式?

iOS 13 目前的 VC 模式在横向模式下不起作用

导航栏在横向模式下向上移动 - iOS

尝试在 iOS 8 中以横向模式而不是纵向模式显示键盘

iOS:在横向模式下无法调整模式视图中的框架大小