【问题标题】:Multiple Resolution Support in Cocos2d-x v2.2.5 in Portrait modeCocos2d-x v2.2.5 纵向模式下的多分辨率支持
【发布时间】:2014-09-15 06:04:36
【问题描述】:

我正在 cocos2d-x 中开发一个纵向模式的游戏。

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

我还尝试了 cocos-x 提供的不同策略。

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

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

我什至尝试过更新版本的 cocos2d-x,但他们也没有提供任何可以同时支持 ios 和 android 屏幕的东西。

【问题讨论】:

  • 您是否尝试过使用 CCDevice::getDPI()。它给出每英寸的像素。如果您需要在所有设备中以相同的物理尺寸显示您的对象,您可以使用此值来调整大小、定位等。
  • 嗯好的,我会试试的。

标签: cocos2d-x screen-resolution


【解决方案1】:

我在 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 设计
  • 引擎的分辨率和内容比例因子

【讨论】:

    【解决方案2】:

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

    希望这会有所帮助。

    问候 声纳系统

    【讨论】:

      【解决方案3】:

      纵向模式对我来说是这样的:

      标题下方:

      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);
      
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多