cocos2d-x 3.x(实现帧动画的几种方法)
方法一(动画帧):
auto sprite = Sprite::create("1.png");
sprite->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
this->addChild(sprite);
auto animation = Animation::create();
char nameSize[20] = {0};
for (int i =1; i<13; i++)
{
sprintf(nameSize, "%d.png",i);
animation->addSpriteFrameWithFile(nameSize);
}
animation->setDelayPerUnit(0.02f);
animation->setLoops(-1);
animation->setRestoreOriginalFrame(true);
auto animate = Animate::create(animation);
sprite->runAction(animate);
方法二(vector):
auto frameCache = SpriteFrameCache::getInstance();
frameCache02->addSpriteFramesWithFile("1.plist");
auto sprite = Sprite::createWithSpriteFrameName("1.png");
sprite->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
this->addChild(sprite);
创建一个容器
Vector<SpriteFrame*> vec;
char name[20] = {0};
for (int i = 1; i<13; i++) {
sprintf(name, "%d.png",i);
vec.pushBack(frameCache->getSpriteFrameByName(name));
}
auto animation = Animation::createWithSpriteFrames(vec);
animation->setDelayPerUnit(0.05f);
animation->setLoops(-1);
animation->setRestoreOriginalFrame(true);
auto animate = Animate::create(animation);
sprite->runAction(animate);
方法三(纹理):
auto texture = Director::getInstance()->getTextureCache()->addImage("dragon_animation.png");
auto frame0 = SpriteFrame::createWithTexture(texture, Rect(132*0, 132*0, 132, 132));
auto frame1 = SpriteFrame::createWithTexture(texture, Rect(132*1, 132*0, 132, 132));
auto frame2 = SpriteFrame::createWithTexture(texture, Rect(132*2, 132*0, 132, 132));
auto frame3 = SpriteFrame::createWithTexture(texture, Rect(132*3, 132*0, 132, 132));
auto frame4 = SpriteFrame::createWithTexture(texture, Rect(132*0, 132*1, 132, 132));
auto frame5 = SpriteFrame::createWithTexture(texture, Rect(132*1, 132*1, 132, 132));
auto sprite2 = Sprite::createWithSpriteFrame(frame0);
sprite2->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
this->addChild(sprite2);
Vector<cocos2d::SpriteFrame *> array;
array.pushBack(frame0);
array.pushBack(frame1);
array.pushBack(frame2);
array.pushBack(frame3);
array.pushBack(frame4);
array.pushBack(frame5);
auto animation2 = Animation::createWithSpriteFrames(array, 0.2f);
sprite2->runAction(RepeatForever::create(Animate::create(animation2)));