`
yidongkaifa
  • 浏览: 4065228 次
文章分类
社区版块
存档分类
最新评论

cocos2d-x 菜鸟实习生学习篇(五) action例子

 
阅读更多

这几天一直都在看红孩儿的博客,里面讲cocos2d-x可以说:逆天了!!!你无法想象他注解的详细,详细的让你觉得枯燥,害怕。对我这种初学者来说,一篇博客看下来整个人都凌乱了。不过真的讲的很好!不吊大家胃口,直接上链接:http://blog.csdn.net/honghaier?viewmode=contents

其中几篇对action 讲述的很好,从里到外。本文就是在红孩儿博客的基础上,再参考蓝米粒的动作小例子:http://blog.csdn.net/xiaoxiangp/article/details/7693343



还是分步骤来:

1.先看.h文件,在类的声明中声明各种需要用到的成员函数和成员变量:

  1. classHelloWorld:publiccocos2d::CCLayer
  2. {
  3. public:
  4. //Here'sadifference.Method'init'incocos2d-xreturnsbool,insteadofreturning'id'incocos2d-iphone
  5. virtualboolinit();
  6. //there'sno'id'incpp,sowerecommandtoreturntheexactlyclasspointer
  7. staticcocos2d::CCScene*scene();
  8. //aselectorcallback下面是按下各个文字菜单调用的回调函数
  9. virtualvoidLJCallback(CCObject*pSender);
  10. virtualvoidCXCallback(CCObject*pSender);
  11. virtualvoidBJCallback(CCObject*pSender);
  12. virtualvoidInitback(CCObject*pSender);
  13. virtualvoidGZCallback(CCObject*pSender);
  14. virtualvoidJDCallback(CCObject*pSender);
  15. virtualvoidonExit();
  16. //implementthe"staticnode()"methodmanually
  17. LAYER_NODE_FUNC(HelloWorld);
  18. protected:
  19. cocos2d::CCSprite*m_tamara;
  20. cocos2d::CCProgressTimer*m_left;
  21. cocos2d::CCSizes;
  22. };

2. 现在看.cpp文件,init()函数中把菜单实现,并且初始化各种变量...代码中有很多宏判断,是因为需要转换字符才能显示中文,后面会告诉大家方法...


  1. boolHelloWorld::init()
  2. {
  3. boolbRet=false;
  4. do
  5. {
  6. CC_BREAK_IF(!CCLayer::init());
  7. CCMenuItemFont::setFontName("Thonburi");//设置菜单字体
  8. CCMenuItemFont::setFontSize(25);//设置菜单字体大小
  9. s=CCDirector::sharedDirector()->getWinSize();
  10. std::stringmenuItemStr="立即动画";
  11. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  12. GBKToUTF8(menuItemStr,"gb2312","utf-8");//调用字符转换函数
  13. #endif
  14. CCMenuItem*shuenjian=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
  15. menu_selector(HelloWorld::LJCallback));//创建菜单项,并绑定触发函数..
  16. menuItemStr="持续动画";
  17. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  18. GBKToUTF8(menuItemStr,"gb2312","utf-8");
  19. #endif
  20. CCMenuItem*chixu=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
  21. menu_selector(HelloWorld::CXCallback));
  22. menuItemStr="补间动画";
  23. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  24. GBKToUTF8(menuItemStr,"gb2312","utf-8");
  25. #endif
  26. CCMenuItem*bujian=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
  27. menu_selector(HelloWorld::BJCallback));
  28. menuItemStr="跟踪动画";
  29. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  30. GBKToUTF8(menuItemStr,"gb2312","utf-8");
  31. #endif
  32. CCMenuItem*genzong=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
  33. menu_selector(HelloWorld::GZCallback));
  34. menuItemStr="进度动作";
  35. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  36. GBKToUTF8(menuItemStr,"gb2312","utf-8");
  37. #endif
  38. CCMenuItem*jingdu=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
  39. menu_selector(HelloWorld::JDCallback));
  40. menuItemStr="初始化精灵";
  41. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  42. GBKToUTF8(menuItemStr,"gb2312","utf-8");
  43. #endif
  44. CCMenuItem*InitItem=CCMenuItemFont::itemFromString(menuItemStr.c_str(),this,
  45. menu_selector(HelloWorld::Initback));
  46. CCMenu*pMenu=CCMenu::menuWithItems(shuenjian,chixu,bujian,genzong,jingdu,InitItem,NULL);//创建菜单
  47. pMenu->alignItemsVertically();//设置菜单的显示为垂直列表
  48. CC_BREAK_IF(!pMenu);
  49. pMenu->setPosition(s.width/2+s.width/4,s.height/2);//设置菜单显示位置
  50. this->addChild(pMenu,1);//添加菜单进入
  51. //初始化精灵
  52. m_tamara=CCSprite::spriteWithFile("jl.png");
  53. m_tamara->retain();
  54. addChild(m_tamara,1);
  55. m_tamara->setPosition(CCPointMake(s.width/2,s.height/2));
  56. //初始化背景图片,这里用的图片是960X360..也就是两个屏幕宽
  57. CCSprite*bg=CCSprite::spriteWithFile("bg_24.png");
  58. bg->setPosition(ccp(s.width/2+s.width/2,s.height/2));
  59. this->addChild(bg,-1);
  60. bRet=true;
  61. }while(0);
  62. returnbRet;
  63. }

3. 规范代码,养成好习惯,所以我们添加<Tools.h> 和 <Tools.cpp> 文件,把字符转换的处理函数写在里面:

--Tools.h,其中会调用到‘.iconv.h’这个头文件,要自己手动添加进去,这让我一阵好找!在

cocos2d-1.0.1-x\cocos2dx\platform\third_party\win32\iconv

tool.h:

  1. #ifndef_TOOLS_H_
  2. #define_TOOLS_H_
  3. #include"cocos2d.h"
  4. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  5. #include"iconv.h"
  6. intGBKToUTF8(std::string&gbkStr,constchar*toCode,constchar*formCode);
  7. #endif
  8. #endif

--Tools.cpp

  1. #include"tools.h"
  2. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)
  3. //字符转换,使cocos2d-x在win32平台支持中文显示
  4. intGBKToUTF8(std::string&gbkStr,constchar*toCode,constchar*formCode)
  5. {
  6. iconv_ticonvH;
  7. iconvH=iconv_open(formCode,toCode);
  8. if(iconvH==0)
  9. {
  10. return-1;
  11. }
  12. constchar*strChar=gbkStr.c_str();
  13. constchar**pin=&strChar;
  14. size_tstrLength=gbkStr.length();
  15. char*outbuf=(char*)malloc(strLength*4);
  16. char*pBuff=outbuf;
  17. memset(outbuf,0,strLength*4);
  18. size_toutLength=strLength*4;
  19. if(-1==iconv(iconvH,pin,&strLength,&outbuf,&outLength))
  20. {
  21. iconv_close(iconvH);
  22. return-1;
  23. }
  24. gbkStr=pBuff;
  25. iconv_close(iconvH);
  26. return0;
  27. }
  28. #endif

4. 添加附加依赖项,不添加的话,会提示找不到的外部符号....


对工程右键-> 属性 -> 连接器 -> 输入 -> 附加依赖项 栏目->后面有个按钮,点击打开,换一行加入libiconv.lib,或者在最后空一格加上libiconv.lib也行


5. 对号入座的实现各个小功能的回调函数和退出的处理函数:


  1. //立即动画,不需要时间,直接完成
  2. voidHelloWorld::LJCallback(CCObject*pSender)
  3. {
  4. CCActionInstant*Action1=CCPlace::actionWithPosition(ccp(100,100));
  5. m_tamara->runAction(Action1);
  6. }
  7. //持续动画
  8. voidHelloWorld::CXCallback(CCObject*pSender)
  9. {
  10. //创建一个同时动作,同时移动和旋转
  11. CCFiniteTimeAction*actionsGo=CCSpawn::actions(
  12. CCMoveTo::actionWithDuration(1.0f,ccp(0,0)),
  13. CCRotateBy::actionWithDuration(1.0f,360),NULL);
  14. //创建一个同时动作,同时移动和旋转
  15. CCFiniteTimeAction*actionsBack=CCSpawn::actions(
  16. CCMoveTo::actionWithDuration(1.0f,CCPointMake(s.width/2,s.height/2)),
  17. CCRotateBy::actionWithDuration(2,720),NULL);
  18. //创建一个组合动作,执行完第一个动作后执行下一个
  19. CCFiniteTimeAction*All=CCSequence::actions(actionsGo,actionsBack,NULL);
  20. //使用动作包装把组合动作变成永久循环执行..需要转换成CCActionInterval*
  21. m_tamara->runAction(CCRepeatForever::actionWithAction((CCActionInterval*)All));
  22. }
  23. //补间动画
  24. voidHelloWorld::BJCallback(CCObject*pSender)
  25. {
  26. CCActionInterval*actionTo=CCRotateBy::actionWithDuration(4.0f,360);
  27. m_tamara->runAction(CCEaseBackOut::actionWithAction(actionTo));
  28. }
  29. //跟踪动画
  30. voidHelloWorld::GZCallback(CCObject*pSender)
  31. {
  32. CCActionInterval*Moveto=CCMoveBy::actionWithDuration(3.0f,CCPointMake(s.width*2+100,0));
  33. CCActionInterval*MoveBack=Moveto->reverse();
  34. CCFiniteTimeAction*All=CCSequence::actions(Moveto,MoveBack,NULL);
  35. CCAction*rep=CCRepeatForever::actionWithAction((CCActionInterval*)All);//包装动作为永久循环
  36. m_tamara->runAction(rep);//执行rep动作
  37. this->runAction(CCFollow::actionWithTarget(m_tamara,CCRectMake(0,0,s.width*2,s.height)));//执行跟踪动作
  38. }
  39. //进度动作
  40. voidHelloWorld::JDCallback(CCObject*pSender)
  41. {
  42. CCProgressTo*to1=CCProgressTo::actionWithDuration(2,100);
  43. CCProgressTimer*left=CCProgressTimer::progressWithFile("jl.png");
  44. left->setType(kCCProgressTimerTypeHorizontalBarLR);
  45. addChild(left);
  46. left->setPosition(CCPointMake(100,s.height/2));
  47. left->runAction(CCRepeatForever::actionWithAction(to1));
  48. }
  49. //初始化精灵
  50. voidHelloWorld::Initback(CCObject*pSender)
  51. {
  52. m_tamara->stopAllActions();//停止所有动作
  53. m_tamara->setRotation(0.0f);//设置旋转为0,即为没有旋转的状态
  54. m_tamara->setPosition(ccp(s.width/2,s.height/2));//设置位置为中心
  55. }
  56. voidHelloWorld::onExit()
  57. {
  58. m_tamara->release();
  59. CCLayer::onExit();
  60. }


最后的释放中,我只释放了 m_tamara.但是还有一个m_left成员变量,如果在此释放就会出问题..有谁知道原因的请留言哦...谢谢



分享到:
评论

相关推荐

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-x游戏编程——C++篇 .iso

    Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,

    cocos2d-x-2.1.5

    cocos2d-x-2.1.5

    cocos2d-x事件类

    在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...

    Cocos2d-x高级开发教程

    Cocos2d-x是移动跨平台开发最流行的游戏引擎,而本书是一本很全面的、比较‘接地气’的游戏开发教程。书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关...

    大富翁手机游戏开发实战基于Cocos2d-x3.2引擎

    资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...

    cocos2d-x-3.2旧版引擎下载

    cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656

    cocos2d-x实战项目

    cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...

    cocos2d-x 2.x action集合(详细注释分类)

    cocos2d-x 2.x action集合(详细注释分类)

    Cocos2D-X游戏开发技术精解

    资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...

    cocos2d-x-3.0 类图

    这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    精通COCOS2D-X游戏开发 基础卷_2016.4-P399-13961841.pdf

    精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发

    Cocos2d-x 3.x游戏开发实战pdf含目录

    Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。

    Cocos2D-X游戏开发技术精解.pdf

    《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...

    cocos2d-x windows vs2010配置

    Cocos2d-x windows vs2010 配置图文详解

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本

    cocos2d-x 3.0

    cocos2d-x 3.0 人物行走 . 包里有代码和 图片资源.

    Cocos2d-x-3.x游戏开发之旅

    Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签

Global site tag (gtag.js) - Google Analytics