cocos2d-x初学笔记08:角色动画Animation
来源:互联网 发布:网购衣服3d模型知乎 编辑:程序博客网 时间:2024/05/20 21:48
其实这篇所讲的角色的动画Animation在TestCpp项目里面是属于动作Action范围的,咱们现在把它拿出来单独的说一说。
动画Animation其实就是一张张连贯的图片顺序播放,新建一个项目,命名为”AnimationTest“。咱们先准备一些图片资源,这里咱们还是从TestCpp示例中获得。从D:\cocos2d-2.0-x-2.0.4\samples\TestCpp\Resources\Images(你的目录有可能不一样)找到grossini.png和grossini_dance_01.png到grossini_dance_14共十四张连贯图片复制到我们自己的项目中的Resources文件夹,然后在VS中右击项目选择添加->现有项,添加刚刚复制的十五张图片到我们的项目AnimationTest即可。
(注意:我使用的cocos2d-x版本是2.0.4,系统是win7)下载地址
简单起见,我们只对HelloWorld.cpp文件的init()函数进行修改。但在修改之前我们现在HelloWorld.h文件中使用cocos2d命名空间,即在文件中加入”using namespace cocos2d;“这句话,然后修改init()函数,修改后的函数如下
bool HelloWorld::init(){ bool bRet = false; do { ////////////////////////////////////////////////////////////////////////// // super init first ////////////////////////////////////////////////////////////////////////// CC_BREAK_IF(! CCLayer::init()); ////////////////////////////////////////////////////////////////////////// // add your codes below... ////////////////////////////////////////////////////////////////////////// // 1. Add a menu item with "X" image, which is clicked to quit the program. // Create a "close" menu item with close icon, it's an auto release object. CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); CC_BREAK_IF(! pCloseItem); // Place the menu item bottom-right conner. pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20)); // Create a menu with the "close" menu item, it's an auto release object. CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); CC_BREAK_IF(! pMenu); // Add the menu to HelloWorld layer as a child layer. this->addChild(pMenu, 1);//取得屏幕大小CCSize size=CCDirector::sharedDirector()->getWinSize();//创建一个精灵作为角色,并设置位置CCSprite* sprite=CCSprite::create("grossini.png");sprite->setPosition(ccp(size.width/2,size.height/2));//将这个精灵添加进布景this->addChild(sprite);//创建一个动画 CCAnimation* animation = CCAnimation::create();//这是需要每帧播放的14个图片,用以实现动画的效果 for( int i=1;i<15;i++) {//这里是遍历这14个图片,把每个图片按照顺序加入到动画中 char szName[100] = {0};//注释1(文章后面会给出详细解释) sprintf(szName, "grossini_dance_%02d.png", i); animation->addSpriteFrameWithFileName(szName); } //设置每一帧播放的时间,共14张图片,共播放2.8秒,那么2.8/14就是每帧的时间 animation->setDelayPerUnit(2.8f / 14.0f); //设置播放完成后是否回到精灵的默认图片 animation->setRestoreOriginalFrame(true); //创建一个动作,是一个动画效果的动作 CCAnimate* action = CCAnimate::create(animation); //执行动画动作 sprite->runAction(action); bRet = true; } while (0); return bRet;}
运行程序,我们会看到一个小人在屏幕中央跳舞,跳舞结束后会回到初始化的状态。
注释1:我们来说明一下文章中出现的sprintf()函数的功能和用法。
第一次看到sprintf(),我想大家肯定会联想到常见的JAVA输出函数printf(),首先说一下这两个函数的区别
sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。所以我们可以简单的认为,sprintf()函数是用来制作字符串的。
我们先来说一个最简单的用法,将数字123打印成一个字符串保存到s中,那么实现代码如下:
sprintf(s, "%d", 123);
我们再来分析一下文章中出现的 sprintf(szName, "grossini_dance_%02d.png", i); 看起来复杂了很多,因为多了个”02“,其实它的作用也是一样,将i按照第二个参数的格式打印成字符串保存到szName中。
其中里面的”2“表示i的宽度,”0“表示不足指定宽度的左边用”0“来补齐。比如说 i 为5,那么最终生成的字符串为”grossini_dance_05.png“。其实sprintf()函数还有很多用法,这里就不一一描述了,感兴趣的自行查阅资料。
最后祝愿每一个奋斗在路上的人早日实现梦想!
- cocos2d-x初学笔记08:角色动画Animation
- cocos2d-x初学笔记05:添加角色Sprite
- cocos2d-x初学笔记07:角色动作Action
- cocos2d-x初学笔记
- cocos2d-x帧动画 -- 角色跑动
- cocos2d-x帧动画 -- 角色跑动
- 《初学cocos2d-x》- 动画CCAnimation(2)
- 《初学cocos2d-x》- 动画TexturePacker(3)
- cocos2d-x学习笔记-动画
- cocos2d-x初学笔记01:HelloWorld浅析
- cocos2d-x初学笔记02:一些概念
- cocos2d-x初学笔记03:菜单Menu
- cocos2d-x初学笔记09:进度条Progress
- cocos2d-x初学笔记10:特效Effect
- cocos2d-x初学笔记12:定时器schedule
- cocos2d-x初学笔记13:地图Map
- cocos2d-x初学笔记14:精灵表
- cocos2d-x初学笔记09:进度条Progress
- vb.net数据库编程(04):一个SQLserver修改记录的简单例子。
- test
- 使用Nginx+Tomcat7在RHEL6.3下实现负载均衡
- MySQL 之 触发器详解
- 升级win8后视频没有图像只有声音的一个解决方法
- cocos2d-x初学笔记08:角色动画Animation
- JAVA发送手机短信
- Ubuntu下安装QT4
- fedora使用yum之前的两个必装插件
- 在ssh整合中gethibernatetemplate()的空指针
- [游戏技术]求生之路声音文件参数
- shell脚本获取当前ip地址
- rmxp4droidV2.3 Final (Android版RMXP模拟器)
- 思考指针!