資源:
在遊戲中數值顯示是乙個常用部件,本節將實現對積分的累加,在積分榜上滾動顯示。
將積分榜進行分解:將數字分解為乙個的位,個位 ,十位等, 每個位的物件都只需要管理自己這個位上的數字滾動顯示,然後有乙個對每個位進行管理的排程物件,將這些位相互之間的數學關係維護起來。
數字位物件:rollnum
管理數字位物件:rollnumgroup
先講解上述兩個物件的實現,讓後再將它們怎樣融入到主遊戲介面gamelayer的。
下面是rollnum及rollnumgroup的標頭檔案
#ifndef __fishingjoystep1__rollnum__
#define __fishingjoystep1__rollnum__
#include "cocos2d.h"
class gamelayer;
/**數字的每個位,主要控制這個位上得數字的滾動 */
class rollnum : public cocos2d::ccsprite ;
/**管理數字的每個位,包括控制每個位的位置,及解析數字的每個位,排程rollnum進行顯示 */
class rollnumgroup : public cocos2d::ccobject ;
#endif /* defined(__fishingjoystep1__rollnum__) */
的實現**如下
//#include "rollnum.h"
#include "cocos2d.h"
#include "gamelayer.h"
using namespace cocos2d;
#define numberheight 16
#define numberwidth 12
#define textureheight 196
rollnum::rollnum():m_nnumber(0), m_bup(true), m_ncurtexh(0), m_nendtexh(0), m_brolling(false), m_ptexture(null){}
rollnum::~rollnum()
bool rollnum::init()
//不斷更新數字紋理顯示的位置,達到滾動數字的效果
void rollnum::updatenumber(cocos2d::cctime dt)
//每次向上或向下滾動4px,在數字紋理中,每兩兩數字的上下間隔為4px,數字本身高度為16px
if(m_bup)
else
int h = m_ncurtexh;
if(m_ncurtexh >= 180)
//如果進入最後乙個數字的高度範圍,則從最後乙個數字的位置開始
h = 180;
//擷取指定範圍的數字紋理
ccspriteframe *pframe = ccspriteframe::createwithtexture(m_ptexture, ccrectmake(0, h, numberwidth, numberheight));
//更新自己負責的位的展現的數字紋理
this->setdisplayframe(pframe);
m_brolling = true; }
void rollnum::setnumber(int var, bool bup)
int rollnum::getnumber()
rollnumgroup.cpp 實現如下
rollnumgroup *rollnumgroup::createwithgamelayer(gamelayer *pgamelayer, int ndigit)
else
} rollnumgroup::rollnumgroup():m_prollnumarray(null), m_nvalue(0){}
rollnumgroup::~rollnumgroup()
bool rollnumgroup::initwithgamelayer(gamelayer *pgamelayer, int ndigit)
return true; }
void rollnumgroup::setposition(cocos2d::ccpoint pt)
} void rollnumgroup::setvalue(int nvalue)
} //
下面來看看主遊戲介面是怎麼使用它們的。
在gamelayer.h 中新增 rollnum.h的標頭檔案
新增定義:
public:
cc_synthesize_retain(rollnumgroup *, m_prollnumgroup, rollnumgroup);//定義積分榜
在gamelayer.cpp中進行初始,呼叫,和釋放
在 gamelayer::~gamelayer()方法中新增釋放**:
cc_safe_release(m_prollnumgroup);
在void gamelayer::initbackground()新增初始化**:
this->setrollnumgroup(rollnumgroup::createwithgamelayer(this, 6));
m_prollnumgroup->setposition(ccp(353, 21));
在 void gamelayer::updategame(cocos2d::cctime dt)中,將上一節兩句**注釋放開:
m_nscore += 125;//此處簡單處理,讓每一種魚的積分都是125分
//更新積分榜
m_prollnumgroup->setvalue(m_nscore);
ok,到現在積分榜就可以正常使用了。趕緊執行起來感受一下自己的捕魚達人吧。
cocos2dx 仿射變換
affinetransform ccaffinetransformmake float a,float b,float c,float d,float tx,float ty const vec2 point,const affinetransform t const vec2 point,cons...
cocos2dx 仿射變換
affinetransform ccaffinetransformmake float a,float b,float c,float d,float tx,float ty const vec2 point,const affinetransform t const vec2 point,cons...
cocos2d x 資源集合
官網 主席子龍山人 archive 2011 08 08 2131019.html kmyhy的專欄 老g的小屋 cocos2d xtouch事件cocos2d 事件冒泡規律 和 ccmenu一直響應事件的解決辦法 swallow touches how to setmultipletouchena...