PlayN iOS横向模式
Posted
技术标签:
【中文标题】PlayN iOS横向模式【英文标题】:PlayN iOS Landscape mode 【发布时间】: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 的对象可见),剩余屏幕空间为黑色。
我已通过以下方式调查了该问题:
-
对 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横向模式的主要内容,如果未能解决你的问题,请参考以下文章