Cocos2d-x v2.2.5纵向模式下的多分辨率支持
我正在cocos2d-x中制作一个游戏,它处于纵向模式 现在,很长一段时间以来,我一直在研究如何在cocos2d-x中正确实现多分辨率,但失败了。我在论坛上关注这个,但这还不够,我也搜索了很多,但找不到解决方案 我还尝试了cocos-x提供的不同政策 我浏览了以下所有链接和教程 使用这些链接,我可以实现所有ios分辨率,但不是所有android屏幕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,但它们也没有提供任何支持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);
}