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

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

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

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: ios landscape playn


    【解决方案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 不是来自谷歌代码)。该版本已修复此问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多