至少从 Cocos2d-x 版本 2.0.4 开始,您可以为 Resources 文件夹创建单独的子目录,并选择在运行时使用哪一个。如果没有找到资源,Cocos2d-x 会自动回退到 Resource 文件夹而不是你设置的子目录。这在 Cocos2d-x wiki 中都有描述。
例如,你可以做这样的事情
const CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// Landscape
if( winSize.height < winSize.width) {
if( winSize.width >= 1536 ) {
// iPad Retina here.
CCFileUtils::sharedFileUtils()->setResourceDirectory( "iPadRetina" );
} else {
// Some lower resolution tablet stuff.
CCFileUtils::sharedFileUtils()->setResourceDirectory( "lowResTablet" );
}
}
// Portrait
else {
if ( winSize.width >= 720 ) {
// Phones like Galaxy Nexus.
CCFileUtils::sharedFileUtils()->setResourceDirectory( "720" );
} else if ( winSize.width >= 640 ) {
// iPhone retina
CCFileUtils::sharedFileUtils()->setResourceDirectory( "iPhoneRetina" );
} else {
// Low res phone.
CCFileUtils::sharedFileUtils()->setResourceDirectory( "lowResPhone" );
}
}
你从你的AppDelegate::applicationDidFinishLaunching()
函数中调用上面的代码来告诉 Cocos2d-x 使用正确的资源子目录。假设您已将目录“iPhoneRetina”设置为您的资源目录。然后当你这样做
CCSprite *sprite = CCSprite::create( "cookie.png" );
Cocos2d-x 将首先查找文件“iPhoneRetina/cookie.png”。如果在那里找不到它,它会在放弃之前在资源文件夹的根目录中查找“cookie.png”。
祝你移植好运!:)
-- 关于 DPI 的编辑 --
在 Cocos2d-x 的较新版本中
显然有一个功能CCDevice::getDPI()
(用户在评论中建议),我在 2.1.3 版本中找到了它。但是,除非您绝对需要所有东西都以相同的物理尺寸出现,否则我建议您让事物的真实尺寸浮动一点,并专注于匹配 1:1 的分辨率。如果您开始缩放事物,它们会看起来很模糊。此外,我不认为在不同的屏幕尺寸下相同的分辨率是常见的。例如,我知道有几种物理尺寸的全高清屏幕,但我认为所有纵向屏幕都非常接近,所有平板电脑也一样。
我不知道,您当然可以制作一个应用程序中元素的物理屏幕尺寸非常重要的应用程序。一个测量应用程序,您可以在其中将东西放在屏幕上并以厘米或其他东西为单位进行测量。如果是这种情况,那么屏幕大小当然是重中之重,您可能需要研究该CCDevice::getDPI()
功能。