进度条
进度条实际上就是用ProgressTimer挡住一个精灵,之后随着时间逐渐展开
Sprite* bg = Sprite::create("ccs-res/cocosui/loadingbar.png");//背景
Sprite* fore = Sprite::create("ccs-res/cocosui/slidbar.png");//前景
ProgressTimer* timer = ProgressTimer::create(fore); //前景放入timer
bg->addChild(timer); //必须把进度条放入背景中
timer->setPosition(bg->getAnchorPointInPoints());//让进度条和背景重合,进度条的锚点也在中心,通过getAnchorPointInPoints获取坐标
addChild(bg);
之后,必须修改一下进度条的属性:
timer->setType(ProgressTimer::Type::BAR); //进度条类型,有条状BAR,有时钟状RADIAL
timer->setMidpoint(Vec2(0, 0)); //进度条的起始点,从左到右(0,y),从右到左(1,y),从下到上(x,0),从上到下(x,1),最大取值1,如设(0,0)即从左下角开始。
timer->setBarChangeRate(Vec2(1, 0)); //设置进度条推进策略,(1,0)表示沿x轴推进,y轴每次都是100%。
timer->setPercentage(0); //设置进度条的进度,按百分比。我们是通过这个函数来控制进度的。
批处理渲染
同一个纹理的精灵一起来渲染——增加效率。称之为批处理精灵
SpriteBatchNode* node = SpriteBatchNode::create("CloseNormal.png");
addChild(node);
如果我想添加1W个这样的精灵:用循环将精灵添加入批处理精灵中
for (int i = 0; i <10000; ++i)
{Sprite* sprite = Sprite::createWithTexture(node->getTexture());
node->addChild(sprite);}
3.6的cocos提供了自动批处理,但是其效果差强人意。
为何批处理精灵这么快?
因为BatchNode重载了visit函数,该函数并没有遍历所有子节点,而是将节点信息组织成一个draw(也被重载)命令发送给绘制线程。故此提高了效率。