cocos2d-x 图片数字显示,可用于计分板,金币显示板等
2013-07-24 00:39
309 查看
作用:cocos2d-x 编写的图片数字显示,可用于计分板,金币显示板等。
先看看效果图:
1.图片格式
我所编写的代码是按照下面图片中的数字排列顺序编写的
2.编写 NumberSprite 类,但数字的显示
这个类主要是实现单个的数字显示用
3.多数字显示
4.测试一下
在helloworld中添加一个函数
之后再编写logic函数,让他自动的变一下数字
这样运行一下就会是上面效果图的样子了
这几个文件的代码大家进入下载页去下载吧,不要资源分啊
http://download.csdn.net/detail/u011405562/5804571
先看看效果图:
1.图片格式
我所编写的代码是按照下面图片中的数字排列顺序编写的
2.编写 NumberSprite 类,但数字的显示
这个类主要是实现单个的数字显示用
// // NumberSprite.h // ShowNumberNodeTest // // Created by Za aa on 13-7-14. // // #ifndef __ShowNumberNodeTest__NumberSprite__ #define __ShowNumberNodeTest__NumberSprite__ #include "cocos2d.h" USING_NS_CC; class NumberSprite : public CCSprite { public: /* 创建一个数字精灵 参数: pTexture: 包含所有数字图片的图片 width; 单个数字显示的图片宽度 lenght; 数字显示高度 */ static NumberSprite *CreateNumberSprite(CCTexture2D *pTexture, float width, float lenght); /* 直接显示数字 参数: num 是显示的数字图片序号 isanimation:是否显示动画 */ void f_ShowNumber(int num); /**初始化 */ bool myInit(float width, float lenght); private: /** 保存输入的图片宽高,用于显示滚动数字或是直接显示数字*/ //保存显示图片宽度 float s_width; //保存图片高度 float s_lenght; }; #endif /* defined(__ShowNumberNodeTest__NumberSprite__) */
// // NumberSprite.cpp // ShowNumberNodeTest // // Created by Za aa on 13-7-14. // // #include "NumberSprite.h" bool NumberSprite::myInit(float width, float lenght) { s_width = width; s_lenght = lenght; } NumberSprite *NumberSprite::CreateNumberSprite(CCTexture2D *pTexture, float width, float lenght) { NumberSprite *pobSprite = new NumberSprite(); if (pobSprite && pobSprite->initWithTexture(pTexture) ) { pobSprite->setVisible(false); pobSprite->myInit(width , lenght); pobSprite->autorelease(); return pobSprite; } CC_SAFE_DELETE(pobSprite); return NULL; } void NumberSprite::f_ShowNumber(int num) { this->setVisible(true) ; this->setTextureRect(CCRectMake(s_width * num, 0, s_width, s_lenght)); }
3.多数字显示
// // ShowNumberNode.h // ShowNumberNodeTest // // Created by Za aa on 13-7-12. // // #ifndef __ShowNumberNodeTest__ShowNumberNode__ #define __ShowNumberNodeTest__ShowNumberNode__ #include "cocos2d.h" USING_NS_CC; /* */ #define SCROLLTIME 0.2f class ShowNumberNode : public CCNode { public: /* 创建一个showNumberNode节点 参数: path: 文件名 numberMAX:数字显示的最大值 showwidth: 每个数字图片的宽度 showheight:每个数字图片的宽度 */ static ShowNumberNode *CreateShowNumberNode(const char *path, int numberMAX, float showwidth, float showheight); /*同上*/ bool Init(const char *path, int numberMAX, float showwidth, float showheight); // 修改显示数字,直接显示数字无滚动 void f_ShowNumber(int number); private: //添加数字精灵到节点,并进行排列 void f_addSprite(); //判断输入数字的位数,比如:11就是2位,333就是3位 int f_NumberLength(int number); //返回num从右边开始第k位数字的值,比如:654321,第3就是3,也就是百位上的数字 int f_GetNumber(int num, int k); private: //用于保存数字最大值 int s_NumberMax; //计算数字最大位数 int s_NumberLength; //图片宽度 float s_ShowWidth; // 图片的高度 float s_ShowHeight; CCSpriteBatchNode *batchNode ; }; #endif /* defined(__ShowNumberNodeTest__ShowNumberNode__) */
// // ShowNumberNode.cpp // ShowNumberNodeTest // // Created by Za aa on 13-7-12. // // #include "ShowNumberNode.h" #include "NumberSprite.h" ShowNumberNode *ShowNumberNode::CreateShowNumberNode(const char *path, int numberMAX, float showwidth, float showheight) { ShowNumberNode *pobSprite = new ShowNumberNode(); if (pobSprite ) { pobSprite->Init(path , numberMAX, showwidth, showheight); pobSprite->autorelease(); return pobSprite; } CC_SAFE_DELETE(pobSprite); return NULL; } bool ShowNumberNode::Init(const char *path, int numberMAX, float showwidth, float showheight) { //初始化参数 this->s_NumberMax = numberMAX; this->s_ShowWidth = showwidth; this->s_ShowHeight = showheight; //计算数字长度 s_NumberLength = f_NumberLength(numberMAX); // batchNode = CCSpriteBatchNode::create(path); //将numbersprite 添加进节点 f_addSprite(); return true; } /*添加数字精灵到节点,并进行排列*/ void ShowNumberNode::f_addSprite() { for (int i = 0; i < s_NumberLength; i++) { /* code */ NumberSprite *nsp = NumberSprite::CreateNumberSprite(batchNode->getTexture(), s_ShowWidth, s_ShowHeight); nsp->setPosition(ccp(-s_ShowWidth * i, 0)); batchNode->addChild(nsp, 0, i); } this->addChild(batchNode); } // 修改显示数字 void ShowNumberNode::f_ShowNumber(int number) { if (number < 0 || number > s_NumberMax) return; int numlength = f_NumberLength(number); for (int i = 0; i < s_NumberLength; i++) { /* code */ int num = f_GetNumber(number, i + 1); NumberSprite *nsp = (NumberSprite * ) batchNode->getChildByTag(i); //将超出数字的隐藏,比如:最大值是999,现在需要显示33,那就是隐藏百位上的0 if (i >= numlength) { //TODO : nsp->setVisible(false); //break; } else { nsp->setVisible(true); nsp->f_ShowNumber(num); } } } //判断输入数字的位数,比如:11就是2位,333就是3位 int ShowNumberNode::f_NumberLength(int number) { if(number == 0 ) return 1; int flag = 0; while (number) { number /= 10; flag++; } return flag; } //返回num从右边开始第k位数字的值 int ShowNumberNode::f_GetNumber(int num, int k) { while (k > 1) //我们计数是从1开始的,电脑是从0开始的。当k=1时,依然大于0,还要执行一次循环,那样就多减了一位,所以到1就结束 { num = num / 10; k--; } return num % 10 ; //返回数位的值 }
4.测试一下
在helloworld中添加一个函数
void HelloWorld::addNumberNode() { ShowNumberNode * snn = ShowNumberNode::CreateShowNumberNode("menu_num.png", 923, 22, 30 ); snn->f_ShowNumber(testnum); snn->setPosition(ccp(100,100)); this->addChild(snn,0,0); schedule(schedule_selector(HelloWorld::logic), 2.0f); }
之后再编写logic函数,让他自动的变一下数字
void HelloWorld::logic(float dt) { ShowNumberNode * snn = (ShowNumberNode *)this->getChildByTag(0); snn->f_ShowNumber(testnum ); testnum = testnum +10; }
这样运行一下就会是上面效果图的样子了
这几个文件的代码大家进入下载页去下载吧,不要资源分啊
http://download.csdn.net/detail/u011405562/5804571
相关文章推荐
- cocos2d-x 编写的金币显示板(单个数字的)
- cocos2d 中用 图片数字 作为 Lable 显示
- cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)
- 【Cocos2D-X 游戏引擎】初窥门径(3)图片文字显示
- 主角连击敌人处理:连击次数的显示(图片数字字体)---1
- 又一个jquery轮播效果,焦点图,带数字显示序号,这个可以添加对应标题在图片上,支持主流浏览器
- QT5-控件-QScrollArea-可以用于把一个窗口分割为多个-比如根据图片大小显示滚动条
- 闲得无聊 之 Cocos2d html5引擎 显示一张图片
- smarty 图片列表页 取消分页(用于手机显示)
- 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)
- 用于设置图片显示的类 DisplayImageOptions options
- cocos2d-x加载图片显示不清晰
- 又一个jquery轮播效果,焦点图,带数字显示序号,这个可以添加对应标题在图片上,支持主流浏览器
- 如何用silverlight 做用于图片展示的画廊(三):利用silverlight + WCF +Linq 保存图片或照片,并利用silverlight +WCF下载图片显示在画廊中
- 显示手写体数字图片经PCA压缩后的二维空间分布
- Android登录界面;注意图片尽量保存drawable这一级目录下,文件命名只能用小写字母、数字,下划线界面不显示应用名称和全屏覆盖
- cocos2d-x如何解决图片显示模糊问题
- 又一个jquery轮播效果,焦点图,带数字显示序号,这个可以添加对应标题在图片上,支持主流浏览器
- cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)-性能改造
- cocos2d-x 3.X 接收图片 base64 转码显示