如何使用c ++在cocos2dx ios中为不同的分辨率选择资源

时间:2014-08-28 09:23:12

标签: c++ cocos2d-x

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

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模拟器。代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

我认为在构建项目时 - 编译器将资源文件复制到应用程序文件夹的根目录。有时候它会复制iphone的最后一个文件,有时会复制到ipad(它会覆盖以前的文件)。所以检查文件夹&#34; ipad&#34; &安培; &#34; iphone4的&#34;在您的项目中有蓝色。这意味着该文件夹将被复制(内置子目录/文件)。

当您将此资源拖放到项目中时,您应该选择&#34;为任何添加的文件夹创建文件夹引用&#34;在弹出对话框中:enter image description here

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

7.1 - version of iOS Simulator
DF7882AE-FF34-4D2F-A42C-25317785212B - app-id in simulator

添加了以下内容的答案: 我想问一下Android设备的维度是多少。什么是最佳资源大小维度...

对于任何项目,资源结构可能不同。例如,在我的上一个项目中,我使用下一个项目。我有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");

我所有的精灵,菜单,背景等等我都设置了3种维度的逻辑。 我不会想到&#34; hdpi,xhdpi,mdpi,ldpi&#34;。

您可以在此处找到Dim来源:https://github.com/duksel/Cocos2dx-DukselLib/tree/master/etc 在该类中实现了分辨率的检测,并通过维度值创建了Point,Size,float值。