码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2d-x 3.0 Action

时间:2014-08-15 22:36:20      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:cocos2d-x 3.0   action   浅析入门   

***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************




题外话:

好久,好久,好久,好久,木有更新了 bubuko.com,布布扣

8月份,去韩国旅游了9天,回来,直接去井冈山参加实践活动(课题是做一个安卓应用)

恩,现在就是在井冈山实践基地,要19号才能回去。bubuko.com,布布扣

而且,终于终于连上WIFI,可以发篇博客了。



正文:

这次是关于cocos2d-x的Action,就是动作啦,各种动作,这个的学习,最好根据cocos2d-x的样例。

{

PS:样例程序的打开方法:

用VS2012  打开项目:  

->cocos2d-x文件夹下

——build文件夹下

cocos2d-win32.vc2012项目

}



本篇博文,通过七个测试程序来展示一些基本的Action:

一、Manual Transformation————对精灵的基本设定

二、MoveTo和MoveBy————精灵的基本动作(顺序执行动作)

三、Span+Rotate————精灵的基本动作(同时执行动作)

四、DelayTime:m+delay+m————动作的延迟执行

五、Repeat和RepeatForever————重复执行

六、Follow Action————跟随动作

七、Sequence of InstantActions————结束机制



恩,可以边运行着程序,边看着代码,观摩着学习bubuko.com,布布扣

文件可以看ActionTest.cpp

在运行的程序中,选择Action—Basic观看

bubuko.com,布布扣





——第一个测试——

Manual Transformation


它的相应代码位置在:

//------------------------------------------------------------------
//
// ActionManual
//
//------------------------------------------------------------------
void ActionManual::onEnter()
{
    ActionsDemo::onEnter();

    auto s = Director::getInstance()->getWinSize();

    _tamara->setScaleX( 2.5f);
    _tamara->setScaleY( -1.0f);
    _tamara->setPosition( Point(100,70) );
    _tamara->setOpacity( 128);

    _grossini->setRotation( 120);
    _grossini->setPosition( Point(s.width/2, s.height/2));
    _grossini->setColor( Color3B( 255,0,0));

    _kathia->setPosition( Point(s.width-100, s.height/2));
    _kathia->setColor( Color3B::BLUE);
}

std::string ActionManual::subtitle() const
{
    return "Manual Transformation";
}


可以从代码中看到,

对对象进行的一系列操作:

//------------------------------------------------------------------
//
// ActionManual
//
//------------------------------------------------------------------
void ActionManual::onEnter()
{
    ActionsDemo::onEnter();

	// 获得以点为单位的OpenGL视图的大小
    auto s = Director::getInstance()->getWinSize();


	// 对第一个对象进行操作:
	// 对X轴缩放
    _tamara->setScaleX( 2.5f);
    // 对Y轴缩放
	_tamara->setScaleY( -1.0f);
    // 设定坐标
	_tamara->setPosition( Point(100,70) );
    // 设定透明度
	_tamara->setOpacity( 128);


	// 对第二个对象进行的操作:
	// 设定旋转角度
    _grossini->setRotation( 120);
    _grossini->setPosition( Point(s.width/2, s.height/2));
	// 设定颜色
    _grossini->setColor( Color3B( 255,0,0));


<span style="white-space:pre">	</span>// 对第三个对象进行的操作:
    _kathia->setPosition( Point(s.width-100, s.height/2));
    _kathia->setColor( Color3B::BLUE);
}

std::string ActionManual::subtitle() const
{
    return "Manual Transformation";
}


或许你注意到了,这里的函数是OnEnter,为什么不是Init呢?

这里就要说一下OnEnter和Init的区别:

Init:对象初始化时执行的函数。

OnEnter:当对象显示出来的时候,开始执行的函数。(可见的时候才被执行)




——第二个测试——

第二个测试是关于MoveTo和MoveBy的测试

代码:

//------------------------------------------------------------------
//
//    ActionMove
//
//------------------------------------------------------------------
void ActionMove::onEnter()
{
    ActionsDemo::onEnter();

    centerSprites(3);

    auto s = Director::getInstance()->getWinSize();

	// 设定几个动作:
	// 移动到一个绝对的坐标点,第一个参数是花费的时间
    auto actionTo = MoveTo::create(2, Point(s.width-40, s.height-40));
    // 移动到一个相对坐标点,即以本位置为基准向右80,向上80,第一个参数为花费的时间
	auto actionBy = MoveBy::create(2, Point(80,80));
    // 做一个actionBy的反向动作
	auto actionByBack = actionBy->reverse();


	// 给三个精灵安排分别执行的动作
	// 第一个精灵 执行actionTo动作
    _tamara->runAction( actionTo);
    // 第二个 顺序化执行actionBy和actionByBack动作(先执行actionBy,再执行actionByBack)
	_grossini->runAction( Sequence::create(actionBy, actionByBack, NULL));
    // 第三个精灵执行MoveTo动作(内容:用1秒钟,向上,向右移动40)
	_kathia->runAction(MoveTo::create(1, Point(40,40)));
}

std::string ActionMove::subtitle() const
{
    return "MoveTo / MoveBy";
}

此处要特别注意的就是  Sequence,这个可以顺序执行一系列动作。


接下来的都可以自己查看,

借助API,很容易就能明白了。





——第三个测试程序——

这个测试程序是  Span+Rotate

//------------------------------------------------------------------
//
// ActionSpawn
//
//------------------------------------------------------------------

void ActionSpawn::onEnter()
{
    ActionsDemo::onEnter();

    alignSpritesLeft(1);

    auto action = Spawn::create(
        JumpBy::create(2, Point(300,0), 50, 4),
        RotateBy::create( 2,  720),
        NULL);

    _grossini->runAction(action);
}

std::string ActionSpawn::subtitle() const
{
    return "Spawn: Jump + Rotate";
}

这个,就是让两个动作同时执行。

JumpBy::create(2,Point(300,0),50,4)

跳跃的语句。

RotateBy::create(2,720)

翻转语句。

类似于Sequence,Spawn可以用来同时进行多个动作。




——第四个测试程序——

这个是 DelayTime:m+delay+m

就是中间加一个延迟时间:

//------------------------------------------------------------------
//
// ActionDelayTime
//
//------------------------------------------------------------------
void ActionDelayTime::onEnter()
{
    ActionsDemo::onEnter();

    alignSpritesLeft(1);

    auto move = MoveBy::create(1, Point(150,0));
    auto action = Sequence::create( move, DelayTime::create(2), move, NULL);

    _grossini->runAction(action);
}

std::string ActionDelayTime::subtitle() const
{
    return "DelayTime: m + delay + m";
}

很明显,用的是Sequence,顺序执行,中间加一个延迟语句DelayTime即可。




——第五个测试程序——

Repeat和RepeatForever

//------------------------------------------------------------------
//
// ActionRepeat
//
//------------------------------------------------------------------
void ActionRepeat::onEnter()
{
    ActionsDemo::onEnter();

    alignSpritesLeft(2);


    auto a1 = MoveBy::create(1, Point(150,0));
    auto action1 = Repeat::create(
        Sequence::create( Place::create(Point(60,60)), a1, NULL) , 
        3); 
    auto  action2 = RepeatForever::create(
        Sequence::create(a1->clone(), a1->reverse(), NULL)
        );

    _kathia->runAction(action1);
    _tamara->runAction(action2);
}

std::string ActionRepeat::subtitle() const
{
    return "Repeat / RepeatForever actions";
}

Repeat执行的是一定次数的动作。

Repeat::create中有两个参数:第一个是需要重复的动作,第二个重复的次数。

重复的次数取值范围是1到2^30之间的无符号整数。

而相应的RepeatForever就没有次数的参数,只有一个参数。




——第六个测试程序——

Follow Action

//------------------------------------------------------------------
//
// ActionFollow
//
//------------------------------------------------------------------
void ActionFollow::onEnter()
{
    ActionsDemo::onEnter();

    centerSprites(1);
    auto s = Director::getInstance()->getWinSize();

	// 给精灵设置坐标位置
    _grossini->setPosition(Point(-200, s.height / 2));
	// 给精灵设定动作
    auto move = MoveBy::create(2, Point(s.width * 3, 0));
    auto move_back = move->reverse();
    // 设定动作的顺序
	auto seq = Sequence::create(move, move_back, NULL);
    // 设定 动作永远重复
	auto rep = RepeatForever::create(seq);

    _grossini->runAction(rep);

	// 设定跟随的语句,creat有两个参数,第一个是所需要跟随的精灵,第二个参数是动作的边界
    this->runAction(Follow::create(_grossini, Rect(0, 0, s.width * 2 - 100, s.height)));
}

设定跟随的语句中,第二个参数是关于动作的边界,当参数设置为Rect::ZERO时,即为没有边界。




——第七个测试程序——

Sequence of InstantActions

//------------------------------------------------------------------
//
//    ActionSequence2
//
//------------------------------------------------------------------
void ActionSequence2::onEnter()
{
    ActionsDemo::onEnter();

    alignSpritesLeft(1);

	// 设置节点是否可见,false为不可见
    _grossini->setVisible(false);

	// 设定  顺序 展示的动作
    auto action = Sequence::create(
		Place::create(Point(200,200)),
		Show::create(),
		MoveBy::create(1, Point(100,0)),
		// 当上述三个动作结束后,调用下面这三个
		CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback1,this)),
		CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback2,this,_grossini)),
		CallFunc::create( CC_CALLBACK_0(ActionSequence2::callback3,this,_grossini,0xbebabeba)),
		NULL);

    _grossini->runAction(action);
}

CallFunc::create语句中,

CC_CALLBACK_0表示没有参数,Action使用时应用

CC_CALLBACK_1表示只有一个参数,Menu使用时应用

CC_CALLBACK_2表示绑定有两个参数,一般用于用户的单点触摸,多点触摸



******总结一下******bubuko.com,布布扣


Action:

——基本动作

MoveTo/MoveBy

RoatTo/RoatBy

JumpTo/JumpBy

.......

——组合动作

Sequence  顺序执行

Spawn 同时执行

——动作的取反

Reverse

——动作的重复执行

Repeat

RepeatForever

——函数动作

CallFucn::create()


恩,就是到这里啦~bubuko.com,布布扣




bubuko.com,布布扣参考资料:沈老师


***************************************转载请注明出处:http://blog.csdn.net/lttree********************************************

cocos2d-x 3.0 Action,布布扣,bubuko.com

cocos2d-x 3.0 Action

标签:cocos2d-x 3.0   action   浅析入门   

原文地址:http://blog.csdn.net/lttree/article/details/38565287

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!