cocos2dx抖动动作

本文详细介绍了Cocos2d-x中抖动动作类的实现原理及使用注意事项,包括如何通过随机坐标改变节点位置并在动作结束后还原位置。

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

由于工作需要,所以自己写了一个抖动动作类


通过头文件可以知道,抖动类是继承于ActionInterval类,cocos2dx中很多动作类都是继承的这个类(比如:MoveBy等)。

下面我们接着看实现:


提供了两种创建方式的接口,在initWithDuration函数里面把m_strengthX和m_strengthY记录下来。


通过头文件我们可以知道,update、startWithTarget和stop都是重写的基类的虚函数。

当我们在外部调用这个动作的时候(比如:sp_fangkuai->runAction(Shake::create(1.0, 5));),就会执行到startWithTarget函数里面来,这个时候我们把初始坐标用m_initialPos记录下来。

当动作开始之后,每帧都会调用update函数,通过到基类里面去看update函数的注释可以知道参数dt的范围是0->1,0表示动作刚开始,0.5表示动作进行了一半,1表示动作结束。

当动作结束之后,会执行到stop函数,这个时候通过基类的getTarget()接口获取到执行这个动作的node,并且把node的坐标改成m_initialPos,这个时候节点node就还原了。

注意:当一个节点node正在执行抖动动作的时候,不能重复执行抖动动作。为什么?因为正在执行抖动动作的节点此时的坐标有可能不是原坐标,当你再次执行这个动作的时候,就会把当前坐标赋值给m_initialPos,等动作执行完之后,节点可能会还原不到初始位置。当然也可以外部记录好节点的初始坐标,等动作执行完之后通过setPosition手动还原。

总结:原理其实很简单,就是在持续时间内,并且在给定范围内随机一个坐标,并且把节点的位置改变到这个坐标上。在动作结束之后还原节点的位置。

能力有限,如有什么错误,欢迎大家一起交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值