使用 cocosbuilder3.0 为多设备开发通用UI

来源:互联网 发布:数据库王珊第5版pdf 编辑:程序博客网 时间:2024/06/06 04:48

从CocosBuilder3.0 开始,引起了自动缩放目录的支持, 我们可以把资源放到这个目录中, 然后CCB会根据目标设备,缩放到一个合理的尺寸中

再在Cocos2D-X中,通过判断设备类型,引进对应的目录中的资源, 这种新的机制, 给我们提供了许多的方便


自动缩放前的资源:

CCB\Resources\Resources-auto\xxxxxx.png


自动缩放后的资源:

CCB\Published-IOS\resources-iphone\xxxxxx.png

CCB\Published-IOS\resources-iphonehd\xxxxxx.png

CCB\Published-IOS\resources-ipad\xxxxxx.png

CCB\Published-IOS\resources-ipadhd\xxxxxx.png

CCB\Published-Android\resources-resources-xsmall\xxxxxx.png

...


cocos2d-x中的程序代码:

需要根据当前设备的类型,加载对应的资源,这里给出部份代码:

在AppDelegate.cpp中的applicationDidFinishLaunching 函数中加入以下代码:

    std::vector<std::string>vecFindPath;


   TargetPlatform target = getTargetPlatform();

   CCSize frameSize = pEGLView->getFrameSize();

   switch (target)

    {

        casecocos2d::kTargetIphone:

        {

            vecFindPath.push_back("Published-iOS");

           if(frameSize.width==480 && frameSize.height==320)                  //iphone3g

            {

                vecFindPath.push_back("Published-iOS/resources-iphone");

            }

           else if(frameSize.width==960 && frameSize.height==640)              //iphone4

            {

                vecFindPath.push_back("Published-iOS/resources-iphonehd");

            }

           else if(frameSize.width==1136 && frameSize.height==640)              //iphone5

            {

                vecFindPath.push_back("Published-iOS/resources-iphone5");        //这个不是自动生成的,3/4的图不好适应,可以单独在这里做适配

                vecFindPath.push_back("Published-iOS/resources-iphonehd");

            }

           else

            {

                CCMessageBox("资源加载失败,无法识别iphone手机版本型号!","错误");

            }

        }break;

       case cocos2d::kTargetIpad:

        {

            vecFindPath.push_back("Published-iOS");

           if(frameSize.width==1024 && frameSize.height==768)                  //ipad/ipadmini

            {

                vecFindPath.push_back("Published-iOS/resources-ipad");

            }

           else if(frameSize.width==2048 && frameSize.height==1536)             //ipad3/ipad4

            {

                vecFindPath.push_back("Published-iOS/resources-ipadhd");

            }

           else

            {

                CCMessageBox("资源加载失败,无法识别ipad版本型号!","错误");

            }

        }break;

        casecocos2d::kTargetAndroid:

        {

            vecFindPath.push_back("Published-Android");

            //...

        }break;


这样便可以轻松的使用一套资源图片适配到所有设备了, 但注意在CCB中设计的时候一定要换百分比去调整位置, 否则就很难实施起来了!