2016-02-06 5 views
0

Я конвертирую существующую игру cocos2d в андроид, но я получаю проблему с разрешением там. В существующей игре с кокосами я использую там две папки ресурсов для IPAD и одну для IPHONE. Я хочу, чтобы с помощью этой папки существующих ресурсов, Я могу выполнить свою игру для Android. пожалуйста, дайте мне образец кода, который также работает с разрешением для Android.Как поддержка нескольких разрешений для всех устройств Android в cocos2d-x 3.0 в ландшафтном режиме?

ранее я использую это ниже код для IOS

авто директора = директор :: GetInstance();

auto glview = director-> getOpenGLView();

std :: vector searchPaths;

Размер рамкиSize = glview-> getFrameSize();

if (frameSize.height > 640) 
{ 
    UserDefault::getInstance()->setIntegerForKey(DEVICE_TYPE,IPAD); 

    searchPath.push_back(largeResource.directory); 

    if(frameSize.height>768) 
    { 
     UserDefault::getInstance()->setBoolForKey("RETINA",true); 

     Director::getInstance()->setContentScaleFactor(0.5f); 

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

} 
else 
{ 
    UserDefault::getInstance()->setIntegerForKey(DEVICE_TYPE,IPHONE); 
    searchPath.push_back(smallResource.directory); 

    if(director->getWinSize().width == 960) 
    { 
     UserDefault::getInstance()->setBoolForKey(IPOD_5,false); 

    } 
    else 
    { 
     UserDefault::getInstance()->setBoolForKey(IPOD_5,true); 

    } 
} 

UserDefault::getInstance()->flush(); 

FileUtils :: GetInstance() -> setSearchPaths (SearchPath);

ответ

1

Существует слишком много разных размеров экрана на устройствах Android. Например, ниже наиболее распространенные значения в настоящее время на телефонах (первое значение - разрешение, второй & третьих - соотношение сторон):

480х800 - 3: 5 или 0,6
480x854 - 0,5621
768x1280 - 3: 5 или 0,6
720x1280 - 9:16 или 0,5625
1080x1920 - 9:16 или 0,5625
1440x2560 - 9:16 или 0,5625

А для таблеток:

2048x1536 (2048x1440) - 3: 4 или 0,75 (0.7031)
1280x800 (1280x752) - 10:16 или 0,625 (0,5875)
1920x1200 (1920x1104) - 10:16 или 0,625 (0,575)
2560x1600 (2560x1504) - 10:16 или 0,625 (0,5875)
1024x600 (1024x552) - 0,5859 (0,539)

Имейте в виду, что есть строка состояния на планшетах. Требуется некоторое разрешение, и приложение cocos не может видеть полное разрешение устройства, но только усечено (я показал его в скобках). Соответственно изменяется соотношение сторон.
Все это приводит к очень большому выбору значений разрешения. Поэтому было бы лучше сгруппировать значения для устройств с соотношением сторон. В этом случае я использую этот метод в AppDelegate.cpp: метод

static Size designResolutionSize = Size(2560, 1600); // you can choose your designResolutionSize at the top of AppDelegate 

В applicationDidFinishLaunching():

bool AppDelegate::applicationDidFinishLaunching() { 

    … 
    auto glview = director->getOpenGLView(); 
    if(!glview) { 
     glview = GLViewImpl::create("My Game"); 
     director->setOpenGLView(glview); 
    } 
    glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::FIXED_HEIGHT); 

    std::vector <std::string> searchPaths; 
    singleton->setScreenRelation(glview->getFrameSize().height/glview->getFrameSize().width); 
    if (singleton->getScreenRelation() > 1) 
     singleton->setScreenRelation(1/singleton->getScreenRelation()); // isn’t depend on the screen orientation 

    if (singleton->getScreenRelation() <= 0.563) // phones with 9:16 aspect ratio 
    { 
     searchPaths.push_back("PhoneBacks"); 
    } 
    if ((singleton->getScreenRelation() > 0.563)&(singleton->getScreenRelation() <= 0.625)) // phones and tablets with 10:16 and 3:5 aspect ratio 
    { 
     log("WideTablet, %d", singleton->getScreenRelation()); 
    } 
    if (singleton->getScreenRelation() > 0.625) // tablets with 3:4 aspect ratio 
    { 
     searchPaths.push_back("TabletBacks"); 
    } 

    cocos2d::FileUtils::getInstance()->setSearchPaths(searchPaths); 

Итак, вам нужно только фон с тремя различными пропорциями.
Здесь самая важная деталь - ResolutionPolicy::FIXED_HEIGHT (или FIXED_WIDTH) опция. Для ориентации ландшафтного экрана вам нужна политика FIXED_HEIGHT. Это означает, что вы зафиксировали designResolution.height = 1600 пикселей на всех устройствах и ширину переменной.Например, на телефоне 720x1280 у вас есть background.width= 1600 и background.height = 1600/0.5625 = 2844 пикселей. Аналогично используйте FIXED_WIDTH для ориентации на портретном экране.
Этот метод не идеален. Для аналогичных значений соотношения сторон фоны можно разрезать на несколько пикселей или наоборот, можно увидеть по краям черных полос шириной в несколько пикселей. Также этот метод не подходит для перемещения фона. Но для фиксированного фона он дает хорошую картину и требует только трех разрешений фона.

Смежные вопросы