Cocos2dx。对于任何屏幕分辨率,如何获得 1cm(现实生活中)的像素长度?

Cocos2dx. How to get length of 1cm(in real life) in pixel for any screen resolutions?

我在屏幕底部设置了 admob 横幅。

我想抵消所有东西,这样横幅就不会遮住任何东西。

我不知道如何动态获取 admob 横幅的高度。

对于iphone4,admob的高度是120,对于iphone6,是100。

我猜是跟屏幕缩放有关,但我想不通。

我的屏幕是这样设置的AppDelegate.cpp

cocos2d::Size designResolutionSize = cocos2d::Size(1136, 768);

and

glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);

cocos2dx 中没有像 cm 这样的 real-metric 选项,事实上我们不需要它。

但是 cocos2D-x 2.x 和 3.x 对 multi-resolution 问题(iDevices 或 Android 设备)有非常简单的解决方案,正如您在 Multi-resolution support document.

事实上,您只需设置 DesignResolution,然后想象您的目标设备将具有此分辨率。

如果目标设备确实具有此分辨率(或具有相同比例的任何其他设备)cocos2d 将处理修复屏幕并且您的游戏在所有设备上看起来都一样。

当目标设备的比率不同时,您有很多选择(policy)来管理它。

例如,如果您使用 Exact fit 政策,cocos2d 将强制您的游戏(和设计)适应目标设备屏幕(没有黑色边框)。

Exact fit

The entire application is visible in the specified area without trying to preserve the original aspect ratio. Distortion can occur, and the application may appear stretched or compressed.

有关更多详细信息,请查看 official wiki

除了上面所有的词,我发现 This Link(来自 V-Play 引擎)和它的 Safe Zone 定义非常有趣,我强烈推荐你使用这个的 recommended-resolution-value像我一样为您的工作创建页面。

虽然这个 link 来自另一个引擎,但描述可以帮助您更好地理解一切。这是此页面术语与 cocos2d-x 个术语之间的映射:

V-Play::letterbox => Cocos2dx::Show All

V-Play::ZoomToBiggerSide => Cocos2dx::NoBorder


此外,您确实询问了 cocos2dx 开发中所需的图像大小:

如您所知,图像大小的不同与 game-look 在不同分辨率下无关,您可以为每个资产发布一个尺寸的游戏,并且您的 game/app 在所有分辨率下看起来都不错解析策略的描述。

但我们需要为每个资产设置多个 image-size,以优化内存使用。在这种情况下(作为 cocso2dx 解决方案)我们检查设备大小并标记适当的图像集(每个图像集都在一个文件夹中,same-structure/different-size 像 HDR/HD/SD)作为资源的默认文件夹:

    CCSize frameSize = pEGLView->getFrameSize();

    if (frameSize.height > mediumResource.size.height)
    { 
        searchPath.push_back(largeResource.directory); //mark HDR default
        pDirector->setContentScaleFactor(largeResource.size.height/designResolutionSize.height); //handle scaling because of different between our programming-design-resolution and artist-design-canvase-resolution
    }
    else ...