博客文章

CCSpeed、CCFollow

作者: andy.      时间: 2016-12-14 19:44:17

CCSpeed简单来说就是改变原来的移动的速度,CCSpeed::create接受两个参数,第一个为原来创建的延时动作CCActionInterval,第二个参数为倍数。比如下面的代码就是将速度提升至原来的5倍,so~~的以下就过去了。

CCSpeed::create(by, 5);
sprite->runAction(CCSpeed::create(by, 5));

做一个模拟植物大战僵尸中,当僵尸碰到那个冰雪的豌豆,减速的效果:

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

	createZombie();
	createBullet();

	scheduleUpdate();
	return true;
}
void AnimationLayer::update(float xoxo){
	if (bullet&&zombie->boundingBox().intersectsRect(bullet->boundingBox())){
		CCSpeed * speed = CCSpeed::create(by_zombie, 0.1f);
		zombie->runAction(speed);
		bullet->removeFromParentAndCleanup(true);
		bullet = NULL;
	}
}

void AnimationLayer::createZombie(){
	zombie = CCSprite::create("zombies/z_1_attack_01.png");
	zombie->setPosition(ccp(400, 200));
	addChild(zombie);

	by_zombie = CCMoveBy::create(20, ccp(-400, 0));
	zombie->runAction(by_zombie);

	char name[100];
	CCAnimation * animation = CCAnimation::create();
	animation->setDelayPerUnit(0.2f);
	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);

	zombie->runAction(animate);
}

void AnimationLayer::createBullet(){
	bullet = CCSprite::create("sprite/bullet.png");
	bullet->setPosition(ccp(20, 200));
	addChild(bullet);

	CCMoveBy *by = CCMoveBy::create(2, ccp(400, 0));
	bullet->runAction(by);
}

好像减速没效果...

CCFollow:

CCFollow * follow = CCFollow::create(sprite, CCRectZero);
this->runAction(follow);

精灵在中间,背景地图跟着动。