2014-09-15 1 views
0

Я работаю над игрой в cocos2d-x, которая находится в портретном режиме.Поддержка нескольких разрешений в Cocos2d-x v2.2.5 в портретном режиме

Теперь, в течение длительного времени, я работал над тем, как правильно достичь множественного разрешения в cocos2d-x, но не удалось. Я следил за этим great tutorial на форуме, но этого было недостаточно, я также много искал, но не смог найти решение.

Я также пробовал с различными политиками, которые доступны с cocos-x.

Я прошел через все следующие ссылки & учебников

Используя эти ссылки я мог бы достигнуть для всех разрешений Иоса, но не для всех андроид экранов.

Я даже попробовал с новой версией cocos2d-х, но они также не предоставляют ничего, что может поддерживать экраны ios и android.

+0

Вы пробовали использовать CCDevice :: getDPI(). Он дает пиксели на дюйм. Если вам нужно, чтобы ваши объекты отображались в одном и том же физическом измерении во всех устройствах, вы можете использовать это значение для изменения размера, позиционирования и т. Д. – jjpp

+0

hmm okey, я попробую с ним. –

ответ

0

Это работает для меня этот путь портретный режим:

под заголовком: метод

typedef struct tagResource 
{ 

    cocos2d::CCSize size; 
    char directory[100]; 

} Resource; 

static Resource smallResource = { cocos2d::CCSizeMake(640, 960),"iPhone" }; 

static Resource mediumResource = { cocos2d::CCSizeMake(768, 1024),"iPad"}; 

static Resource largeResource = { cocos2d::CCSizeMake(1536, 2048),"iPadhd" }; 

static cocos2d::CCSize designResolutionSize = cocos2d::CCSizeMake(768, 1024); 

в applicationDidFinishLaunching():

// initialize director 

    CCDirector* pDirector = CCDirector::sharedDirector(); 
    CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); 

    pDirector->setOpenGLView(pEGLView); 


    CCSize frameSize = pEGLView->getFrameSize(); 

    std::vector<std::string> searchPaths; 

    // Set the design resolution 


    pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionExactFit); 

    if (frameSize.height <= smallResource.size.height) 
    { 
     searchPaths.push_back(mediumResource.directory);  
     CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths);  

    pDirector->setContentScaleFactor(mediumResource.size.height/designResolutionSize.height); 

    } 
    else if (frameSize.height <= mediumResource.size.height) 
    { 
     searchPaths.push_back(mediumResource.directory); 
     CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths); 
    pDirector->setContentScaleFactor(mediumResource.size.height/designResolutionSize.height); 
    } 
    else 
    { 
     searchPaths.push_back(largeResource.directory); 
     CCFileUtils::sharedFileUtils()->setSearchPaths(searchPaths); 
    pDirector->setContentScaleFactor(largeResource.size.height/designResolutionSize.height); 

    } 
0

Я использую следующий фрагмент кода в моей AppDelegate:

void AppDelegate::multiresolutionSupport() 
{ 
    auto director = Director::getInstance(); 
    auto glview = director->getOpenGLView(); 

    cocos2d::Size designSize = cocos2d::Size(320, 480); 
    cocos2d::Size resourceSize = cocos2d::Size(320, 480); 
    cocos2d::Size screenSize = glview->getFrameSize(); 

    float margin1 = (320 + 640)/2; 
    float margin2 = (768 + 1536)/2; 

    if (screenSize.width < margin1) { 
     FileUtils::getInstance()->addSearchResolutionsOrder("SD"); 
    } else if (480 <= screenSize.width && screenSize.width < margin2) { 
     FileUtils::getInstance()->addSearchResolutionsOrder("HD"); 
     designSize = cocos2d::Size(screenSize.width/2, screenSize.height/2); 
    } else { 
     FileUtils::getInstance()->addSearchResolutionsOrder("HDR"); 
     designSize = cocos2d::Size(screenSize.width/4, screenSize.height/4); 
    } 

    resourceSize = screenSize; 

    director->setContentScaleFactor(resourceSize.width/designSize.width); 
    glview->setDesignResolutionSize(designSize.width, designSize.height, ResolutionPolicy::NO_BORDER); 
} 

вызовов Перед загрузкой каких-либо активов, и вы должны иметь это работает должным образом. Я называю это сразу после создания glview в AppDelegate :: applicationDidFinishLaunching().

Как это работает:

  • он использует кучу магических чисел, чтобы определить (примерно), что текстура разрешение мы должны использовать: SD (@ 1), HD (@ 2) или HDR (@ 4), а затем регулирует размер конструкции соответственно, путем деления его на масштабный коэффициент содержание
  • добавляет соответствующие пути поиска, чтобы он устанавливает FileUtils дизайну
  • разрешение и содержание масштабный коэффициент для двигателя
+0

heii, это не работает для меня, все еще спасибо за вашу помощь –

0

Мы команда, которая сделала многоуровневый учебник для ссылки github, он поддерживает Android, но папки называются только с помощью соглашений об именах iOS.

Надеюсь, это поможет.

С уважением Sonar Systems