纵向模式下Cocos2d-x v2.2.5中的多分辨率支持

时间:2014-09-15 06:04:37

标签: cocos2d-x screen-resolution

我正在使用cocos2d-x进行游戏,这是一种纵向模式。

现在,很长一段时间以来,我一直致力于如何在cocos2d-x中正确实现多分辨率,但失败了。我在论坛上关注了这个great tutorial,但它还不够,我也搜索了很多,但找不到解决方案。

我也尝试过cocos-x提供的不同策略。

我浏览了以下所有链接&教程

使用这些链接我可以实现所有ios分辨率,但不适用于所有Android屏幕。

我甚至尝试使用较新版本的cocos2d-x,但它们也没有提供任何可以同时支持ios和android屏幕的内容。

3 个答案:

答案 0 :(得分: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);
}

在加载任何资产之前调用它,你应该让它正常工作。我在AppDelegate :: applicationDidFinishLaunching()中创建了我的glview之后立即调用它。

工作原理:

  • 它使用一堆魔法数字来确定(大致)纹理 我们应该使用分辨率:SD(@ 1),HD(@ 2)或HDR(@ 4),然后进行调整 相应地设计尺寸,将其除以内容比例因子
  • 它为其设置的FileUtils添加了适当的搜索路径
  • 引擎的分辨率和内容比例因子

答案 1 :(得分: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);

   }

答案 2 :(得分:0)

我们是为github链接制作多分辨率教程的团队,它确实支持Android,但文件夹只使用iOS命名约定来命名。

希望这有帮助。

此致 声纳系统