cocos2dx滚动层添加部件之效率实验-新闻详情

cocos2dx滚动层添加部件之效率实验


发布时间:2016-06-30责任编辑:朱明 浏览:1615


   做cocos2d开发,一直使用cocostudio摆放部件,方便快捷,并且直观,给工作带来了极高的效率。但是一直对其加载速度表示怀疑,今天做了一个测试,就是在滚动层上加载多个部件,看其效率如何。实验如下:

    分别用两种方法在滚动层上加载部件,第一种,循环复制克隆已经读取的部件,第二种,循环读取 .csb文件创建一个部件加载到滚动层上,暂将两种方法命名为:方法一,方法二。

    1、首先摆放部件,做了两个studio界面,如下

方法一:

cocos2dx滚动层添加部件之效率实验1.png

方法二:

cocos2dx滚动层添加部件之效率实验2.png

 

    方法一:第一个界面中包含一个ScrollView控件,ScrollView控件中包含了一个item;

    方法二:第二个是单独的把item控件拿了出来;加载时使用第一个界面的ScrollView;

    2、代码实现在ScrollView中加载300个控件

    方法一:克隆ScrollView控件中的item,加载到ScrollView中;

代码如下:

cocos2dx滚动层添加部件之效率实验3.png

    方法二:直接创建item控件,加载到ScrollView中;

代码如下:

cocos2dx滚动层添加部件之效率实验4.png

     运行后效果如下:

方法一:

cocos2dx滚动层添加部件之效率实验5.png

方法二:

cocos2dx滚动层添加部件之效率实验6.png

 

    对比可以看出 Text控件的描边效果,和颜色都没有了,因为clone()函数是针对Widget类克隆的,子类中的一些元素固然没法克隆,于是在方法一种添加如下代码:

cocos2dx滚动层添加部件之效率实验7.png

 

3、运行后效果完全一致,接下来只是简单的用秒表计时测试加载时间的长短:

    方法一:2.14s

    方法二:6.21s

    结果显而易见了,虽然只是在win32下进行的测试,但加载效率相差近3倍,所以后期在使用滑动层加载多个部件时,尽量使用第一种方法,将部件直接摆在滚动层上,更直观,克隆更方便。

    另外:还有一个极易遇到的问题,就是克隆的部件必须都是基于Widget类或子类,否则会报错,或者无法克隆;(小编在使用时item部件中的图片使用了不少的Sprite类,结果无法显示)

 

 

    代码如下:

方法一:

auto ScrollView_1= static_cast(node->getChildByName("ScrollView_1"));

                for (int i=0;i<100;i++)

                {

                    auto item = (Widget*)ScrollView_1->getChildByName("item");

                    if (i>0)

                    {

                        auto item_clone = item->clone();

                        ScrollView_1->addChild(item_clone);

                        item = item_clone;

                    }

                    item->setPosition(Vec2(0, ScrollView_1->getInnerContainerSize().height-120-(i*120)));

 

                    auto Text_3 = (Text*)item->getChildByName("Text_3");

                    Text_3->enableOutline(Color4B(0,0,0,255),2);//黑色描边

                    Text_3->setTextColor(Color4B(255,255,0,255));

 

                    auto Text_4 = (Text*)item->getChildByName("Text_4");

                    Text_4->enableOutline(Color4B(0,0,0,255),2);//黑色描边

                    Text_4->setTextColor(Color4B(255,222,0,255));

 

                    auto Text_10 = (Text*)item->getChildByName("Text_10");

                    Text_10->enableOutline(Color4B(0,0,0,255),2);//黑色描边

                    Text_10->setTextColor(Color4B(255,222,0,255));

 

                    auto Text_10_0 = (Text*)item->getChildByName("Text_10_0");

                    Text_10_0->enableOutline(Color4B(0,0,0,255),2);//黑色描边

                    //Text_10_0->setTextColor(Color4B(255,222,0,255));

 

                    auto Text_7 = (Text*)item->getChildByName("Text_7");

                    Text_7->enableOutline(Color4B(0,0,0,255),2);//黑色描边

                    Text_7->setTextColor(Color4B(255,222,0,255));

                }

 

方法二:

auto ScrollView_1= static_cast(node->getChildByName("ScrollView_1"));

 

                for (int i=0;i<100;i++)

                {

                    Node* naode = CSLoader::createNode("res/csb/GongHuiPaiMingNode_0.csb");

                    ScrollView_1->addChild(naode);

                    naode->setPosition(Vec2(0, ScrollView_1->getInnerContainerSize().height-120-(i*120)));

                }

 

同舟工作室