cocos2dx的ActionTween 动作使用方法

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);

猜你喜欢

转载自blog.csdn.net/qq_28644183/article/details/78319270