cocos2d-iphonecocos2d-xcocos2d-x-3.0cocos2d-androidcocos2d-x-2.x

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


I have admob banner set up at the bottom of the screen.

I want to offset everything so that nothing is covered up by the banner.

I have no idea how to get the height of the admob banner DYNAMICALLY.

For iphone4, 120 is the height of admob, but for iphone 6, it's 100.

I guess it's something related to screen being scaled, but I couldn't figure it out.

My screen is set up like this in AppDelegate.cpp

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

and

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

Solution

  • There is no real-metric like cm option in cocos2dx and in fact we don't need it.

    But cocos2D-x 2.x and 3.x have very easy solution for multi-resolution problem ( either iDevices or Android devices) As you saw in Multi-resolution support document.

    In fact you just need to set your DesignResolution and then just imagine your target device will has this resolution.

    If target device really has this resolution ( or any other with same ratio) cocos2d will handle to fix screen and your game looks same in all devices.

    And when ratio of target device is different, you have many option ( policy) to manage that.

    For example if you use Exact fit policy, cocos2d will force your game ( and design) to fit target device screen (without that black boarder).

    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.

    For more detail just take a look at the official wiki.

    Beside all above word, I found This Link (from V-Play engine) and Its Safe Zone definition really interesting and I highly recommend you to use recommended-resolution-value of this page for your work as I did.

    Although this link is from another engine but the description helps you understand everything better. Here is a map between this page terms to cocos2d-x terms:

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

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


    In addition you did ask about required image size in cocos2dx development:

    As you know the different size of image is not about game-look in different resolutions and you can publish your game with one size for each asset and your game/app looks good in all resolution with above description for resolution Policies.

    But we need multiple image-size for each asset, to optimize memory usage. in this case ( as cocso2dx solution) we check device size and mark appropriate set of image ( each image set is in one folder with same-structure/different-size like HDR/HD/SD) as default folder of resource:

        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 ...