cocos2dx 3.x跟当年我用的cocos2dx 2.x在熏染上做了很大的改动。已经默认使用了自动合批的方式,简单做了一个实验,在屏幕上绘制3000个精灵,并进行随机移动:
1)第一种方式是每一个sprite都源自一张独立的图片,不合批,代码和数据如下:
1 2 3 4 5 6 7 8 |
for(int i=0; i<3000; i++){ auto *sprite = Sprite::create(); sprite->initWithFile(StringUtils::format("res/item/item_%d.png", i % 8 + 1)); sprite->setPosition(cocos2d::random<float>(-300, 300), cocos2d::random<float>(-300.0f, 300.0f)); auto move = MoveBy::create(3.0f, Vec2(cocos2d::random<float>(-200, 200), cocos2d::random<float>(-200.0f, 200.0f))); sprite->runAction(Repeat::create(Sequence::create(move, move->reverse(),NULL), INT_MAX)); mContainer->getChildByName("root_node")->addChild(sprite); } |
2)第二种方式,使用TexturePacker 将以上图片合并,代码和数据如下:
1 2 3 4 5 6 7 8 9 |
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("res/item/candy_patch.plist"); for(int i=0; i<3000; i++){ auto *sprite = Sprite::create(); sprite->initWithSpriteFrameName(StringUtils::format("item_%d.png", i % 8 + 1)); sprite->setPosition(cocos2d::random<float>(-300, 300), cocos2d::random<float>(-300.0f, 300.0f)); auto move = MoveBy::create(3.0f, Vec2(cocos2d::random<float>(-200, 200), cocos2d::random<float>(-200.0f, 200.0f))); sprite->runAction(Repeat::create(Sequence::create(move, move->reverse(),NULL), INT_MAX)); mContainer->getChildByName("root_node")->addChild(sprite); } |