Cocos2d-x学习(二):动作Action(延时类动作)

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 09:26 点击:

游戏中的大部分精灵都是动态的,所以动作类是游戏引擎中不可或缺的一部分,今天就简单的记录下Cocos2d-x中常用的动作类。

 


Cocos2d-x提供了很多基本的动作类,主要包括两大类:一类是瞬时动作(CCActionInstant),一类是延时动作(CCActionInterval),今天主要记录一下延时动作类的一般用法。

 


1.Cocos2d-x提供的基本延时类动作都提供了ActionTo和ActionBy两种:(Action泛指各种动作)

ActionTo是指动作结束的状态,也就是动作的终点。

ActionBy是指动作执行的状态,也就是动作的执行过程。

 


常用的延时动作类包括:

移动动作:CCMoveBy   CCMoveTo

旋转动作:CCRotateBy   CCRotateTo

缩放动作:CCScaleBy   CCScaleTo

 

跳跃动作:CCJumpBy   CCJumpTo

淡入淡出动作:CCFadeBy   CCFadeIn   CCFadeOut


贝赛尔曲线动作:CCBezierBy   CCBezierTo

......(还有很多种,就不一一列举了,详情查看)

 


2.一般用法

动作中最简单的就要数移动了,下面就分别以CCMoveBy和CCMoveTo举个例子,代码很简单


[cpp]
void HelloWorld::spriteMove() 

    CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 
 
    CCActionInterval *actionTo = CCMoveTo::actionWithDuration(2.0f,  
        CCPointMake(winSize.width * 3 / 4, winSize.height / 2)); 
    CCActionInterval *actionBy = CCMoveBy::actionWithDuration(2.0f, 
        CCPointMake(-winSize.width / 2, 0)); 
    CCActionInterval *actionByCopy = (CCActionInterval *) actionBy->copy(); 
    CCActionInterval *actionBack = actionBy->reverse(); 
 
    oldManSprite->runAction(CCSequence::actions(actionTo, actionByCopy, NULL)); 
    youngSisterSprite->runAction(CCSequence::actions(actionBy, actionBack, NULL)); 

void HelloWorld::spriteMove()
{
 CCSize winSize = CCDirector::sharedDirector()->getWinSize();

 CCActionInterval *actionTo = CCMoveTo::actionWithDuration(2.0f,
  CCPointMake(winSize.width * 3 / 4, winSize.height / 2));
 CCActionInterval *actionBy = CCMoveBy::actionWithDuration(2.0f,
  CCPointMake(-winSize.width / 2, 0));
 CCActionInterval *actionByCopy = (CCActionInterval *) actionBy->copy();
 CCActionInterval *actionBack = actionBy->reverse();

 oldManSprite->runAction(CCSequence::actions(actionTo, actionByCopy, NULL));
 youngSisterSprite->runAction(CCSequence::actions(actionBy, actionBack, NULL));
}

用法很简单,CCMoveTo中的CCPoint参数就是想要“移动到”的位置点,而CCMoveBy中的CCPoint参数就是分别对应x,y轴对应的偏移量 www.2cto.com

(这里是对cocos2d-x中的test示例做了一些修改)


这里需要注意的是actionBy不能重复使用,如果第二次使用的话,会继续从第一次使用到的位置开始继续,不明白的可以尝试一下,现象很明显!

 

 

3.动作完成回调

动作一般支持3种回调方式

(1).无发送者无数据回调:CCCallFunc,示例如下


[cpp]
void HelloWorld::actionCallback() 

    CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 
 
    CCLabelTTF *label = CCLabelTTF::labelWithString("Action Callback!", "Marker Felt", 32); 
    label->setPosition(ccp(winSize.width / 2, winSize.height / 2)); 
 
    this->addChild(label); 

void HelloWorld::actionCallback()
{
 CCSize winSize = CCDirector::sharedDirector()->getWinSize();

 CCLabelTTF *label = CCLabelTTF::labelWithString("Action Callback!", "Marker

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • cocos2d-x学习笔记(19)--label 、label atlas
      • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
      • Cocos2d-x学习(一):HelloWorld
      • cocos2dx在xcode下开发,编译到android上(2)
      • cocos2d 设置屏幕默认方向
      • Cocos2d-x 2.0 之 Actions “三板斧” 之一
      • cocos2d-x学习笔记(22)--地图的使用2(TMX) --Z-Order、AnchorPoi
      • cocos2d-x学习笔记(18)--游戏打包(windows平台)
      • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1