cocos2d-x 编写的金币显示板(单个数字的)

前言:

别管什么游戏都会有一个显示金币的面板,用于显示当前有多少钱什么的,之后用这些钱可以去买点装备,药水什么的,自己编写了一个用于显示金币的面板,只是实现了基本的功能,只能显示一个数字,当然了大家可以多创建几个,随后我将把我完整的显示板写出来,供大家参考

大家先看看效果:

cocos2d-x 编写的金币显示板(单个数字的)_第1张图片


1.代码编写

//
//  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);
    
    /*
     带动画显示数字
     参数:
            startnum:开始的图片序号
            endnum:滚动到的图片序号
            dt:动画的时间
     */
    void f_ScrolltoNumber(int startnum,int endnum,float dt);
    
    /**初始化 */
    bool myInit(float width,float lenght);
    
    /**更新图片,生成动画,根据时间调用*/
    void logic(float dt);

private:
    /** 保存输入的图片宽高,用于显示滚动数字或是直接显示数字*/
    //保存显示图片宽度
    float s_width;
    //保存图片高度
    float s_lenght;

    /**d当前显示的图片序号*/
    int s_ImagesNum;
//    终止显示的图片序号,动画用
    int s_EndNum;
};

#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)
{
    s_ImagesNum     =   num;

    this->setVisible(true)  ;
    this->setTextureRect(CCRectMake(s_width * num, 0, s_width, s_lenght));
}
/*
        带滚动显示数字
        注意:这个函数使用时,必须已经显示了一次数字,也就是必须调用了一次shownumber,或是scrollnumber
        参数:
            endnum: 需要显示的数字,滚动终止数字
            dt:变换数字时间
    */
void NumberSprite::f_ScrolltoNumber(int endnum, float dt)
{
    s_EndNum  =  endnum ;
    schedule(schedule_selector(NumberSprite::logic),dt);
}
void NumberSprite::f_ScrolltoNumber(int startnum, int endnum, float dt)
{
    s_ImagesNum     =   startnum;
    s_EndNum        =   endnum;

    schedule(schedule_selector(NumberSprite::logic), dt);

}
/**更新图片,生成动画,根据时间调用*/
void NumberSprite::logic(float dt)
{
    if (s_ImagesNum > 9 )
    {
        s_ImagesNum = 0;
    }
    f_ShowNumber(s_ImagesNum);
    if (s_ImagesNum == s_EndNum)
    {
        this->unscheduleUpdate();
        return;
    }

    s_ImagesNum++;
}


 2.使用例子 
  

void HelloWorld::addNumberSprite()
{
    CCSpriteBatchNode *batchNode = CCSpriteBatchNode::create("menublood_num.png");
    batchNode->setPosition(ccp(100,100));
    this->addChild(batchNode);
    
    NumberSprite * nsp  = NumberSprite::CreateNumberSprite(batchNode->getTexture(),22,33);
       batchNode->addChild(nsp);
   // nsp->setPosition(ccp(100,100));
    nsp->f_ScrolltoNumber(0,9,0.1f);
    //nsp->f_ShowNumber(1);
    
}


你可能感兴趣的:(cocos2d-x小代码)