Я делаю игру с 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 дюйма.Кто-то может сказать мне эти разрешения зума или помочь мне с другим подходом к этому?