Увеличение разрешения на iOS - PullRequest
0 голосов
/ 10 марта 2019

Я делаю игру с cocos2d-x, и у меня проблема с настройкой правильного designResolutionSize.Я также использую Level Helper и устарел для новых устройств, поэтому я настраиваю designResolutionSize для разных устройств следующим образом:

auto frameSize =  Director::getInstance()->getOpenGLView()->getFrameSize();
if(frameSize.width == 2048.000000){
    sceneSize = Vec2(2048.000000, 1536.000000);
    CCLOG("Is IPad 5TH or 6TH or Air or Air2 or iPad Pro 9.7");
}
else if (frameSize.width == 2224.000000) {
    sceneSize = Vec2(1112.00000,834.00000);
    CCLOG("Is iPadPro 10.5");
}
else if (frameSize.width == 2388.000000) {
    sceneSize = Vec2(1194.00000,834.00000);
    CCLOG("Is iPadPro 11");
}
else if (frameSize.width == 2732.000000) {
    sceneSize = Vec2(1366.00000,1024.00000);
    CCLOG("Is iPadPro 12.9 All Gen");
}
else if(frameSize.width == 1136.000000){
    sceneSize = Vec2(1136.000000, 640.000000);
    CCLOG("Is iPhone 5S o SE");
}
else if(frameSize.width == 1334.000000){
    sceneSize = Vec2(1334.000000, 750.000000);
    CCLOG("Is iPhone 6/6s/7/8");
}
else if(frameSize.width == 2208.000000){
    sceneSize = Vec2(2208.000000, 1242.000000);
    CCLOG("Is iPhone 6/6s/7/8 - PLUS");
}
else if(frameSize.width == 2001.000000){
    sceneSize = Vec2(1104.000000, 621.000000);
    CCLOG("Is iPhone 6/6s/7/8 PLUS - WITH ZOOM");
}
else if(frameSize.width == 2436.000000){
    sceneSize = Vec2(1218, 562);
    CCLOG("Is iPhone X, XS");
}
else if(frameSize.width == 1792.000000){
    sceneSize = Vec2(1218, 562);
    CCLOG("Is iPhoneXr");
}
else if(frameSize.width == 1624.000000){      
    sceneSize = Vec2(1218, 562);
    CCLOG("Is iPhoneXr - WITH ZOOM");
}
else if(frameSize.width == 2688.000000){
    sceneSize = Vec2(1344.000000, 621.000000);
    CCLOG("Is iPhoneXsMax");
}
else{

    UserDefault::getInstance()->setBoolForKey("Zoomed",true);
}


float ratio = curDev->getRatio();
sceneSize.width = sceneSize.width/ratio;
sceneSize.height = sceneSize.height/ratio;

Director::getInstance()->setContentScaleFactor(ratio);

aspect = 2;

if(aspect == 0)//exact fit
{
    sceneSize = designResolutionSize;

    Director::getInstance()->getOpenGLView()->setDesignResolutionSize(designResolutionSize.width,
                                                                      designResolutionSize.height,
                                                                      ResolutionPolicy::EXACT_FIT);
}
else if(aspect == 1)//no borders
{
    Director::getInstance()->getOpenGLView()->setDesignResolutionSize(designResolutionSize.width,
                                                                      designResolutionSize.height,
                                                                      ResolutionPolicy::NO_BORDER);
}
else if(aspect == 2)//show all
{
    Director::getInstance()->getOpenGLView()->setDesignResolutionSize(sceneSize.width,
                                                                      sceneSize.height,
                                                                      ResolutionPolicy::SHOW_ALL);

    designOffset.x = (sceneSize.width - designResolutionSize.width)*0.5;
    designOffset.y = (sceneSize.height - designResolutionSize.height)*0.5;
}

Если на некоторых устройствах включено масштабирование, frameSize изменяется, так что игра загружаетсянеправильно со всеми слоями не на месте.На данный момент я установил блок сообщений, сообщающий пользователю, что он должен включить масштабирование до стандартного уровня, чтобы иметь возможность играть в игру, но это не решение.

Я уже исправил это для некоторых устройств:

  • iPhone 6,7 и 8 в режиме увеличения, установите размер сцены в 1136 x 640 (разрешение iPhone SE)

  • Версии plus в режиме масштабирования, установите размер сцены в 2001 x 1125

  • Установлен iPhone Xr в режиме масштабирования, размер сцены в 1624 x750

Не могу найти разрешения увеличения для iPhoneXsMax и третьего поколения iPad Pro 12,9 дюйма.Кто-то может сказать мне эти разрешения зума или помочь мне с другим подходом к этому?

...