cocos2d-x 图片数字显示,可用于计分板,金币显示板等
来源:互联网 发布:java直播网站源码 编辑:程序博客网 时间:2024/04/29 14:47
作用:cocos2d-x 编写的图片数字显示,可用于计分板,金币显示板等。
先看看效果图:
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.2fclass 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);}
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-x 编写的金币显示板(单个数字的)
- cocos2d-x 图片文字显示
- cocos2d 中用 图片数字 作为 Lable 显示
- cocos2d-x加载图片显示不清晰
- cocos2d-x显示不了图片问题解决方法
- query弹出遮罩层,可用于图片放大显示
- C# 中,ListView的自定义显示,可用于显示不同的颜色和字体等
- cocos2d-x 3.X 接收图片 base64 转码显示
- cocos2d-x显示中文
- Cocos2d-x--中文显示
- cocos2d-x 中文显示
- Cocos2d-x 文字显示
- cocos2d-x如何解决图片显示模糊问题
- cocos2d-X 显示不规则图片方法(遮罩)
- 【Cocos2d-x】可以显示在线图片的CCSprite
- cocos2d-x如何解决图片显示模糊问题
- 可用于discuz X2的,用来显示并保存QQ空间图片的文件~
- strstr和strchr函数的用法
- 程序员的路。。。
- hdu 1044 Collect More Jewels (两种解法 1.bfs+状压 2.bfs+dfs)
- 怎样用Java生成ZIP文件
- 【VC++积累】之八、PreTranslageMessage;TranslageMessage;GetMessage和PeekMessage的区别
- cocos2d-x 图片数字显示,可用于计分板,金币显示板等
- android Expandablelistview的子item点击没有效果
- 寻找逆序对的算法,要求运行时间为O(nlgn),算法导论答案
- 自定义面板类Panel
- 回顾 Exchange 2007 SCC 安装-供需要的人参考!
- JavaScript 中keyup,keydown,keypress
- jQuery.extend 函数详解
- DroidBox
- windows核心编程-互斥器(Mutexes)