在C++中如何选择COCOS2DX IOS中不同分辨率的资源

在C++中如何选择COCOS2DX IOS中不同分辨率的资源,c++,cocos2d-x,C++,Cocos2d X,我正在为iphone和ipad制作不同的图像。我有两个不同的背景图像,但我保留了文件bg1.png的名称。我将ipad分辨率文件放在我的资源中的ipad文件夹中,将iphone分辨率文件放在iphone4文件夹中。我的模式是横向模式,因此高度变为宽度,宽度变为高度 .在didfinishlaunch函数中的AppDelegate.cpp中,我输入了以下代码 bool AppDelegate::applicationDidFinishLaunching() { // initialize dire

我正在为iphone和ipad制作不同的图像。我有两个不同的背景图像,但我保留了文件bg1.png的名称。我将ipad分辨率文件放在我的资源中的ipad文件夹中,将iphone分辨率文件放在iphone4文件夹中。我的模式是横向模式,因此高度变为宽度,宽度变为高度 .在didfinishlaunch函数中的AppDelegate.cpp中,我输入了以下代码

bool AppDelegate::applicationDidFinishLaunching() {
// initialize director

std::vector<std::string> searchPath;

CCSize winSize=CCDirector::sharedDirector()->getWinSize();

CCDirector* pDirector = CCDirector::sharedDirector();
CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();

pDirector->setOpenGLView(pEGLView);

// turn on display FPS
pDirector->setDisplayStats(true);

// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);


if(pDirector->getWinSize().height>=768)
{ 
 CCLOG("if width = %f",pDirector->getWinSize().height);

    searchPath.push_back("ipad");
   // CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);
}
else if(pDirector->getWinSize().height<768)
{
    CCLOG("else width = %f",pDirector->getWinSize().height);

    searchPath.push_back("iphone4");

}
    CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath);

// create a scene. it's an autorelease object
CCScene *pScene = HelloWorld::scene();

// run
pDirector->runWithScene(pScene);

return true;
}

每次它进入if块,但每次交替显示不同的图像。假设我第一次跑步,它会显示ipad的图像。然后我停止构建并重新运行代码,然后显示iphone图像。但我在这两种情况下都使用Ipad模拟器。代码有什么问题吗?

我认为在构建项目时,编译器会将资源文件复制到应用程序文件夹的根目录中。有时它会复制iphone的最后一个文件,有时会覆盖ipad的上一个文件。因此,请检查项目中的文件夹ipad和iphone4是否为蓝色。这意味着此文件夹将被复制,因为它包含子文件夹/文件

将此资源拖放到项目中时,应在弹出对话框中选择“为任何添加的文件夹创建文件夹引用”:

顺便说一句,您可以在构建的应用程序中检查文件的结构。只需为模拟器构建应用程序,然后通过路径~/Library/Application Support/iPhone simulator/7.1/Applications/DF7882AE-FF34-4D2F-A42C-25317785212B/AppNameHere.app/…找到项目的位置。。。其中:

补充回答:我想问安卓设备有如此多的维度。什么是最佳资源大小维度

对于任何项目,资源的结构都可能不同。例如,在我的上一个项目中,我使用了下一个项目。我有3种维度:

nd (normal definition) - for iPhone-retina & iPad-non-retina
md (mini definition)   - for iPhone-non-retina (with sizes of images scaled 0.5x of "normal")
hd (high definition)   - for iPad-retina (with sizes of images scaled 2x of "normal")
在应用程序发布时,我查看设备屏幕大小(以像素为单位),并决定使用什么:

cocos2d::Size size = cocos2d::Director::getInstance()->getVisibleSize();

if( size.width >= 1920 && size.height >= 1280 )
    cocos2d::FileUtils::getInstance()->addSearchPath("images-hd");
else if( size.width >= 960  && size.height >= 640 )
    cocos2d::FileUtils::getInstance()->addSearchPath("images-nd");
elsewhere
    cocos2d::FileUtils::getInstance()->addSearchPath("images-md");
我所有的精灵,菜单,背景等等,我用三种维度的逻辑设置位置。 我不考虑hdpi、xhdpi、mdpi、ldpi

您可以在此处找到Dim源:
在该类中,实现了分辨率检测,并通过dimenstation值创建点、大小、浮点值。

代码可能没有问题。cocos2dx资产搜索代码有点奇怪,它使用了一些奇怪的缓存策略来避免搜索。我们最终将所有文件名包装在一个函数调用中,该函数调用以@2x_u为前缀,因此没有文件名别名。这很有效。谢谢但它是否适用于android,因为在android中没有添加文件夹选项的创建引用。你能告诉它Android什么时候你将构建apk文件吗?构建器脚本将把你所有的文件从Resources文件夹复制到assets文件夹,结构相同。所以,把你的ipad和iphone4放在资源文件夹的根目录下。顺便说一句,你可以从不同的来源构建资产文件夹。例如,在我的一些项目中,我只有android版本应用程序的特定资源。因此,在密钥复制资源的proj.android/build-cfg.json文件中,我定义了一些需要复制到result assets dir的规则。谢谢。我想问一下,android设备有这么多维度。什么是它的最佳资源大小维度,这样我就不必在资产中放置这么多不同维度的图像,而且游戏在几乎所有设备上都能完美运行hdpi、xhdpi、mdpi、ldpi等。我应该为android采取什么样的分辨率?@Rajan-看看我的第一篇文章,补充回答你的问题。
cocos2d::Size size = cocos2d::Director::getInstance()->getVisibleSize();

if( size.width >= 1920 && size.height >= 1280 )
    cocos2d::FileUtils::getInstance()->addSearchPath("images-hd");
else if( size.width >= 960  && size.height >= 640 )
    cocos2d::FileUtils::getInstance()->addSearchPath("images-nd");
elsewhere
    cocos2d::FileUtils::getInstance()->addSearchPath("images-md");