cocos2d x高仿捕魚達人例項分析(五)

2021-06-15 10:12:36 字數 2888 閱讀 6970

資源:

在遊戲中數值顯示是乙個常用部件,本節將實現對積分的累加,在積分榜上滾動顯示。

將積分榜進行分解:將數字分解為乙個的位,個位 ,十位等,  每個位的物件都只需要管理自己這個位上的數字滾動顯示,然後有乙個對每個位進行管理的排程物件,將這些位相互之間的數學關係維護起來。

數字位物件: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...