博客文章

cocos2d-x 动画

作者: andy.      时间: 2016-12-14 18:17:25

就是一帧一帧的图片,不断在眼前出现,视觉暂留形成动画。

They are coming~~

bool AnimationLayer::init(){
	CCLayer::init();

	CCSprite *sprite = CCSprite::create("zombies/z_1_attack_01.png");
	sprite->setPosition(ccp(200, 200));
	addChild(sprite);

	CCSpriteFrame * frame1 = CCSpriteFrame::create("zombies/z_1_attack_01.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame2 = CCSpriteFrame::create("zombies/z_1_attack_02.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame3 = CCSpriteFrame::create("zombies/z_1_attack_03.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame4 = CCSpriteFrame::create("zombies/z_1_attack_04.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame5 = CCSpriteFrame::create("zombies/z_1_attack_05.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame6 = CCSpriteFrame::create("zombies/z_1_attack_06.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame7 = CCSpriteFrame::create("zombies/z_1_attack_07.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame8 = CCSpriteFrame::create("zombies/z_1_attack_08.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame9 = CCSpriteFrame::create("zombies/z_1_attack_09.png", CCRectMake(0, 0, 90, 130));
	CCSpriteFrame * frame10 = CCSpriteFrame::create("zombies/z_1_attack_10.png", CCRectMake(0, 0, 90, 130));

	CCAnimation * animation = CCAnimation::create();
	animation->addSpriteFrame(frame1);
	animation->addSpriteFrame(frame2);
	animation->addSpriteFrame(frame3);
	animation->addSpriteFrame(frame4);
	animation->addSpriteFrame(frame5);
	animation->addSpriteFrame(frame6);
	animation->addSpriteFrame(frame7);
	animation->addSpriteFrame(frame8);
	animation->addSpriteFrame(frame9);
	animation->addSpriteFrame(frame10);

	animation->setDelayPerUnit(0.1f);
	animation->setLoops(-1);

	CCAnimate * animate = CCAnimate::create(animation);

	sprite->runAction(animate);

	return true;
}

上面是最笨的方法,然后换一种没得那么笨的方法,首先:

blob.png

然后publish,再然后coming again:

bool AnimationLayer::init(){
	CCLayer::init();

	CCSprite *sprite = CCSprite::create("zombies/z_1_attack_01.png");
	sprite->setPosition(ccp(200, 200));
	addChild(sprite);

	CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("zombies/zombies.plist");
	char name[100];
	CCArray * array = CCArray::create();
	for (int i = 1; i < 11; i++)
	{
		memset(name, sizeof(name), 0);
		if (i < 10)
			sprintf(name, "z_1_attack_0%d.png", i);
		else
			sprintf(name, "z_1_attack_%d.png", i);
		CCSpriteFrame * frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(name);
		array->addObject(frame);
	}
	CCAnimation * animation = CCAnimation::createWithSpriteFrames(array, 0.1f);
	animation->setLoops(-1);

	CCAnimate * animate = CCAnimate::create(animation);

	sprite->runAction(animate);

	return true;
}

。。。。

bool AnimationLayer::init(){
	CCLayer::init();

	CCSprite *sprite = CCSprite::create("zombies/z_1_attack_01.png");
	sprite->setPosition(ccp(200, 200));
	addChild(sprite);

	CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("zombies/zombies.plist");
	char name[100];
	CCAnimation * animation = CCAnimation::create();
	animation->setDelayPerUnit(0.1f);
	for (int i = 1; i < 11; i++)
	{
		memset(name, sizeof(name), 0);
		if (i < 10)
			sprintf(name, "z_1_attack_0%d.png", i);
		else
			sprintf(name, "z_1_attack_%d.png", i);
		animation->addSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(name));
	}
	animation->setLoops(-1);

	CCAnimate * animate = CCAnimate::create(animation);

	sprite->runAction(animate);

	return true;
}

。。。。

bool AnimationLayer::init(){
	CCLayer::init();

	CCSprite *sprite = CCSprite::create("zombies/z_1_attack_01.png");
	sprite->setPosition(ccp(200, 200));
	addChild(sprite);

	char name[100];
	CCAnimation * animation = CCAnimation::create();
	animation->setDelayPerUnit(0.1f);
	for (int i = 1; i < 11; i++)
	{
		memset(name, sizeof(name), 0);
		if (i < 10)
			sprintf(name, "zombies/z_1_attack_0%d.png", i);
		else
			sprintf(name, "zombies/z_1_attack_%d.png", i);
		animation->addSpriteFrameWithFileName(name);
	}
	animation->setLoops(-1);

	CCAnimate * animate = CCAnimate::create(animation);

	sprite->runAction(animate);

	return true;
}

都是接口的调用,只是换着花样的耍而已。