ActionTween有什么用
ActionTween是一个补间动作。ActionTween可以使一个节点在设定的时间内,将其某个属性(Scale,Rotation)从一个设定的初始值(fromValue),到达一个设定的结束值(toValue)。
可能你会想,为什么不直接使用动作类来实现,如ScaleTo::create(),RotateTo::create()来实现呢?
原因在于使用如上的动作类,只能设定其结束值,而不能设定其开始值。
如:
auto sp=Sprite::create("HelloWorld.png");
auto action=ScaleTo::create(1.0,0.1f);
sp->runAction(action);
从上面的例子可以看到,直接使用动作类只能设定结束值。
ActionTween使用场景
当你想保留变化前的初始值的时候,就可以使用ActionTween。
比如在任务进度条中,设置任务进度,在每次任务变化之前,需要保留之前的变化值。
ActionTween使用方法
1.作用的目标必须继承ActionTweenDelegate并重写updateTweenAction方法。
例如:
void TaskAchiveLayer::updateTweenAction(float value, const std::string& key)
{
m_livenessBar->setScale(value);
}
2.ActionTween::create()参数的含义
ActionTween::create(0.5f, "liveness",100,200) 。
//第一个形参是时间,最后两个是变化的开始值和结束值。
//第二个形参是要修改的属性,这里的第二个形参并没有实际意义,只要知其意即可。
3.使用案例
//.h文件
#ifndef _MY_NODE_
#define _MY_NODE_
#include "cocos2d.h"
USING_NS_CC;
class MyNode: public Sprite,public ActionTweenDelegate{
public:
static MyNode* create(const char* fileName);
MyNode();
~MyNode();
void updateTweenAction(float dt, const std::string& key) override;
};
#endif
//.cpp文件
#include "MyNode.h"
MyNode::MyNode(){}
MyNode::~MyNode(){}
MyNode* MyNode::create(const char* fileName){
auto myNode = new MyNode();
if (myNode&&myNode->initWithFile(fileName)){
myNode->autorelease();
return myNode;
}
}
void MyNode::updateTweenAction(float value,const std::string& key){
this->setScale(value);
}
在HelloWorldScene.cpp中添加如下代码:
auto myNode = MyNode::create("HelloWorld.png");
myNode->setPosition(Vec2(300,450));
myNode->runAction(ActionTween::create(3.5,"scale",180,50));
addChild(myNode);