我一直在以2508x1584设计所有面向风景的cocos2dx手机游戏,其“始终可见区域”为2112x1408,因此不会出现黑色边框或缩放,只需要进行一些裁剪,这可能仅限于“可能不可见”区域“如下图所示。
这适用于所有移动设备宽高比,直到iPhone X和三星Galaxy S8到货。这些设备分别具有19.5:9和18:9的宽高比,将“始终可见区域”从1408降低到1158,这足以让我看起来别无选择,只能重新设计我的所有游戏,如下图所示
由于我在iPhone X和三星galaxy S8上运行时,我将之前的所有游戏设计为更高的可见区域,因此游戏的顶部和底部显然都会被切断。
我是否坚持重新设计这些游戏以使它们适合这种较短的宽高比?还是我在这里忽略了另一种解决方案?
答案 0 :(得分:2)
可悲的是,我没有看到任何神奇的解决方案。以下是不同的选项:
ResolutionPolicy::SHOW_ALL
而不是ResolutionPolicy::NO_BORDER
。这是一个快速而肮脏的解决方案,它会在左右两侧显示黑色边框。您可以通过缩放所有内容来改进此解决方案,以便重要区域占据所有屏幕高度。我会选择第二种选择。希望这会有所帮助,并且抱歉没有解决该问题的神奇方法。
答案 1 :(得分:1)
可能对您来说有点晚,但是我想我已经解决了这个问题。 我使用了ResolutionPolicy :: NO_BORDER,其设计分辨率为1080x1920,并且此指南图片
绿色区域为1080x1920。您应该设计适合该区域的应用程序。 S8和iPhoneX等更高的手机将扩展到橙色空间。平板电脑等较宽的设备将扩展到左右两侧的橙色区域。
启动时您需要做的是计算供Director使用的比例因子。
在您的AppDelegate.cpp中执行此操作
auto frameSize = glview->getFrameSize();
float deviceAspectRatio = frameSize.height / frameSize.width;
float designAspectRatio = designResolutionSize.height / designResolutionSize.width;
director->setContentScaleFactor(MAX(
deviceAspectRatio / designAspectRatio,
designAspectRatio / deviceAspectRatio)
);
说实话,我不是100%为何会这样做。我通过尝试随机比例因子直到找到一个有效的比例因子来发现它,然后尝试向后工作以得出一些有效的数学公式。事实证明,将设备的长宽比除以设计分辨率的长宽比是您想要的。