一、绘制顺序
1、globalZOrder
跨节点的控制绘制顺序,最强力的控制
2、localZOrder
针对某个节点的子节点的绘制顺序
3、orderOfArrival
当localZOrder值相同时控制绘制顺序
globalZOrder>localZOrder>orderOfArrival
二、Auto-batching(把连续相同的精灵一起绘制)
连续的且具有相同材质ID(相同纹理,相同混合函数,相同shader)的节点才能满足Auto-batching的要求
三、SpriteBatchNode
四、纹理
autosprite1 = Sprite::create("xiaoruo.png");
autosprite2 = Sprite::createWithSpriteFrame(
SpriteFrame::create("xiaoruo.png",Rect(0, 0, 100, 50)));//截取一部分图片作为纹理
sprite1->setPosition(Point(50,100));
sprite2->setPosition(Point(150,100));
this->addChild(sprite1);
this->addChild(sprite2);
Texture2D* t1 =sprite1->getTexture();//同一张图片的纹理是相同的,可以符合Auto-batching条件
Texture2D*t2 = sprite2->getTexture();
五、使用TexturePacker把不同图片打包到一起,生成.plist文件和.png文件加入资源文件夹
//将图片加载到精灵帧缓存池
SpriteFrameCache*frameCache = SpriteFrameCache::getInstance();
frameCache->addSpriteFramesWithFile("girls.plist","girls.png");
Sprite*sp2 = Sprite::createWithSpriteFrameName("sprite2.png");
sp2->setPosition(Point(100,200));
this->addChild(sp2);
Sprite*sp1 = Sprite::createWithSpriteFrameName("sprite1.png");
sp1->setPosition(Point(250,200));
this->addChild(sp1);
六、动画
//将图片加载到精灵帧缓存池
SpriteFrameCache*frameCache = SpriteFrameCache::getInstance();
frameCache->addSpriteFramesWithFile("boys.plist","boys.png");
autosFrame = frameCache->getSpriteFrameByName("run1.png");
autosprite = Sprite::createWithSpriteFrame(sFrame);
sprite->setPosition(Point(100,100));
this->addChild(sprite);
constint iNum = 15;
SpriteFrame*spriteFrame=NULL;
Vector<SpriteFrame*>vec;
for(int i = 1; i <= iNum; i++)
{
spriteFrame=frameCache->getSpriteFrameByName(StringUtils::format("run%d.png",i));
vec.pushBack(spriteFrame);
}
Animation* animation =Animation::createWithSpriteFrames(vec);//动画
animation->setLoops(-1);//设置为循环动作
animation->setDelayPerUnit(0.1f);//每一周图片间隔时间
Animate* animate =Animate::create(animation);//动作
sprite->runAction(animate);
七、游戏实例《跑跑跑》
这个要记录比较麻烦,有很多个类,而且不按照一步一步实现而是直接看代码价值不大,要看代码可以在原书作者博客上查看。
然后想记录一下在写的过程中遇到的小麻烦:
1、报错:error C2628: “SimpleMoveController”后面接“bool”是非法的(是否忘记了“;”?)
这是因为在类的最后没有写“;”