Cocos2d-x 第五章,没学完的,没写完的博客,下个礼拜六接着写

本文深入解析了Cocos2d-x3.x中的简单动作(MoveTo、MoveBy)、拉伸动作(ScaleTo、ScaleBy)、闪烁动作(Blink),以及复杂动作的运用,包括重复动作(RepeatForever)、动作组合(Sequence与Spawn)。详细阐述了各动作的实现原理、参数设置及实际应用,旨在帮助开发者掌握Cocos2d-x中动画制作的核心技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单动作

运动之MoveTo和MoveBy


// 创建一个精灵对象
Sprite* xiaozhi = Sprite::create("xiaozhi.png");

// 创建MoveTo动作对象
// MoveTo* moveto = MoveTo::create(float duration, const Point& position);
// duration为动作执行的时间,单位为秒,const Point& position指定要移动的目的坐标
MoveTo* moveTo = MoveTo::create(0.9f, Point(250, 150));

// 精灵执行动作
xiaozhi->runAction(moveTo);

其实,MoveBy和MoveTo用法一模一样,只不过前者是移动了多少,后者是移动到多少。

MoveBy* moveBo = MoveBy::create(0.9f, Point(250, 150));

拉伸之ScaleTo和ScaleBy


用法和MoveTo、MoveBy类似。

// 创建ScaleTo对象
ScaleTo* scaleTo = ScaleTo::create(2.8f, 0.4f, 1.0f);

ScaleTo的三个参数:

  • float duration:动作的持续时间,单位为秒;

  • float sx:X方向上的拉伸值;

  • float sy:Y方向上的拉伸值。

ScaleBy是如何拉伸的?参考: 《Cocos2d-x 3.x 开发之旅》P76

Blink之精灵闪烁


Blink可以使精灵闪烁,并且可以指定闪烁次数,使用方法类似于MoveTo等类。

Size visibleSize = Director::getInstance()->getVisibleSize();

// create a sprite
Sprite* sprite = Sprite::create("sprite.png");
sprite->setPosition(Point(visibleSize.width/2, visibleSize.height/2));

// 创建Blink动作对象
Blink* blink = Blink::create(3.0f, 3);// float duration: 动作的持续时间,单位为秒; int uBlinks:闪烁次数

// 精灵执行动作
sprite->runAction(blink);

注意:Cocos2d-x提供很多动作的API,可参考官方的手册!

复杂动作

重复动作之RepeatForever


Cocos2d-x提供了RepeatForever,使得动作一直重复。

bool HelloWorld::init(){

if(!Layer::init()){
    return false;
}

Size visibleSize = Director::getInstance()->getVisibleSize();

// create a sprite
Sprite* sprite = Sprite::create("sprite.png");
sprite->setPosition(Point(visibleSize.width/2, visibleSize.height/2));
this->addChild(sprite);

// 创建一个JumpBy对象,JumpBy是个弹跳动作
JumpBy* jumpBy = JumpBy::create(3.0f, Point(50, 1), 100, 1);

// 以jumpBy为参数,创建一个永久性的重复动作
RepeatForever* repeatForeverAction = RepeatForever::create(jumpBy);
//  以jumpBy为参数,创建一个指定重复次数的动作
Repeat* repeatAction = Repeat::create(jumpBy, 3);

// 精灵执行动作
sprite->runAction(repeatForeverAction);

return true;
}

动作一起做,一边走一边转一边跳之Sequence与Spawn


bool HelloWorld::init(){

if(!Layer::init()){
    return false;
}

Size visibleSize = Director::getInstance()->getVisibleSize();

// create a sprite
Sprite* sprite = Sprite::create("sprite.png");
sprite->setPosition(Point(visibleSize.width/2, visibleSize.height/2));
this->addChild(sprite);

// 创建一个移动动作
MoveBy* moveBy = MoveBy::create(2.2f, Point(40, 20));
// 创建一个JumpBy对象,JumpBy是个弹跳动作
JumpBy* jumpBy = JumpBy::create(3.0f, Point(50, 1), 100, 5);
// 创建一个旋转动作对象
RotateBy* roteBy = RotateBy::create(2.5f, 220, 10);


// 创建组合对象,将所有动作链接起来
Action* actions = Action::create(moveBy, jumpBy, roteBy, NULL);

sprite->runAction(actions);
return true;
}

未完待续………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值