针对cocos2dx游戏的iPhone X /三星Galaxy S8宽高比问题

时间:2018-02-17 03:27:13

标签: cocos2d-x resolution aspect-ratio

我一直在以2508x1584设计所有面向风景的cocos2dx手机游戏,其“始终可见区域”为2112x1408,因此不会出现黑色边框或缩放,只需要进行一些裁剪,这可能仅限于“可能不可见”区域“如下图所示。

design area before iphone x

这适用于所有移动设备宽高比,直到iPhone X和三星Galaxy S8到货。这些设备分别具有19.5:9和18:9的宽高比,将“始终可见区域”从1408降低到1158,这足以让我看起来别无选择,只能重新设计我的所有游戏,如下图所示

design area after iphone x

由于我在iPhone X和三星galaxy S8上运行时,我将之前的所有游戏设计为更高的可见区域,因此游戏的顶部和底部显然都会被切断。

我是否坚持重新设计这些游戏以使它们适合这种较短的宽高比?还是我在这里忽略了另一种解决方案?

2 个答案:

答案 0 :(得分:2)

可悲的是,我没有看到任何神奇的解决方案。以下是不同的选项:

  • 测试屏幕比例,对于iPhone X和Galaxy S8,请将解析策略切换为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%为何会这样做。我通过尝试随机比例因子直到找到一个有效的比例因子来发现它,然后尝试向后工作以得出一些有效的数学公式。事实证明,将设备的长宽比除以设计分辨率的长宽比是您想要的。

enter image description here