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

Cocos2d-x v2.2.5纵向模式下的多分辨率支持,cocos2d-x,screen-resolution,Cocos2d X,Screen Resolution,我正在cocos2d-x中制作一个游戏,它处于纵向模式 现在,很长一段时间以来,我一直在研究如何在cocos2d-x中正确实现多分辨率,但失败了。我在论坛上关注这个,但这还不够,我也搜索了很多,但找不到解决方案 我还尝试了cocos-x提供的不同政策 我浏览了以下所有链接和教程 使用这些链接,我可以实现所有ios分辨率,但不是所有android屏幕 我甚至尝试了更新版本的cocos2d-x,但它们也没有提供任何支持ios和android屏幕的功能。我在AppDelegate中使用了以下代码: v

我正在cocos2d-x中制作一个游戏,它处于纵向模式

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

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

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

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


我甚至尝试了更新版本的cocos2d-x,但它们也没有提供任何支持ios和android屏幕的功能。

我在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::ApplicationIDFinishLaunching中创建了glview之后立即调用它

工作原理:

它使用一组神奇的数字来确定大致的纹理 我们应该使用的决议:SD@1, HD@2或HDR@4然后调整 根据内容比例因子划分相应的设计尺寸 它将适当的搜索路径添加到它设置的文件UTIL设计中 引擎的分辨率和内容比例因子
对于我来说,肖像模式是这样的:

标题下方:

在ApplicationIDFinishLaunching方法中:


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

希望这有帮助

问候
声纳系统

您是否尝试过使用CCDevice::getDPI。它给出每英寸像素数。如果您需要在所有设备中以相同的物理尺寸显示对象,您可以使用此值调整大小、定位等。嗯,好的,我将尝试使用它。
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);
 // 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);

   }