cocos2d游戏 如何显示分数 分数变化

在cocos2d中,我们大多时间需要对时间或者是所取得的分数进行显示,比如得到了一定的奖励之后,会对分数有所增加。显示必须有一个分数的png的Sprite源图片,除此之外,还需要有一个fnt文件,对里面分数的位置进行标识。

1。一个png源

这不用说了,一张图片上比如,依次显示0123456789

2。fnt文件

名字和图片名字一致,扩展名不同 info face="EurostileBold" size=32 bold=1 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1

common lineHeight=33 base=26 scaleW=256 scaleH=256 pages=1 packed=0
page id=0 file="bitmapFont.png"
chars count=10
char id=32   x=0     y=0     width=0     height=0     xoffset=0     yoffset=26    xadvance=8     page=0  chnl=0 
char id=48   x=0     y=0     width=19     height=24     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 
char id=49   x=19     y=0     width=15     height=23     xoffset=2     yoffset=4    xadvance=20     page=0  chnl=0 
char id=50   x=34     y=0     width=19     height=23     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 
char id=51   x=53     y=0     width=20     height=24     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 
char id=52   x=73     y=0     width=21     height=23     xoffset=0     yoffset=4    xadvance=20     page=0  chnl=0 
char id=53   x=94     y=0     width=19     height=24     xoffset=2     yoffset=4    xadvance=20     page=0  chnl=0 
char id=54   x=113     y=0     width=20     height=24     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 
char id=55   x=133     y=0     width=19     height=23     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 
char id=56   x=152     y=0     width=20     height=24     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 
char id=57   x=172     y=0     width=19     height=24     xoffset=1     yoffset=4    xadvance=20     page=0  chnl=0 

 

 3。分数的读取显示

以下是0。8版本cocos2d的方式,

BitmapFontAtlas *scoreLabel = [BitmapFontAtlas bitmapFontAtlasWithString:@"0" fntFile:@"bitmapFont.fnt"];

[self addChild:scoreLabel z:5 tag:kScoreLabel];

scoreLabel.position = ccp(160,430);

简单说明:读取bitmapFont的fnt初始化,而不是用Sprite的方式,加到self的manager里面,z轴层次是5,加一个tag算是ID的标识吧。然后把分数初始化到屏幕的某一个位置上。

 

接下来这一段是关注于如何变化的:

 首先是一个bonus,顾名思义,一个奖励的初始化,比如是一个金币。 

AtlasSprite *bonus = (AtlasSprite*)[spriteManager getChildByTag:kBonusStartTag+currentBonusType];

if(bonus.visible) { //如果这个金币可见

CGPoint bonus_pos = bonus.position; //得到金币的位置

float range = 20.0f; //金币这个精灵的大小

if(bird_pos.x > bonus_pos.x - range &&

  bird_pos.x < bonus_pos.x + range &&

  bird_pos.y > bonus_pos.y - range &&

  bird_pos.y < bonus_pos.y + range ) {

switch(currentBonusType) { //判断金币是多少分的奖励

case kBonus5:   score += 5000;   break;

case kBonus10score += 10000break;

case kBonus50score += 50000break;

case kBonus100: score += 100000; break;

} //先判断这个运动的精灵是否进入的金币的范畴,随后若是进入了,看能得到多少奖励。

NSString *scoreStr = [NSString stringWithFormat:@"%d",score];

BitmapFontAtlas *scoreLabel = (BitmapFontAtlas*)[self getChildByTag:kScoreLabel];

[scoreLabel setString:scoreStr];

id a1 = [ScaleTo actionWithDuration:0.2f scaleX:1.5f scaleY:0.8f];

id a2 = [ScaleTo actionWithDuration:0.2f scaleX:1.0f scaleY:1.0f];

id a3 = [Sequence actions:a1,a2,a1,a2,a1,a2,nil];

[scoreLabel runAction:a3];

[self resetBonus];

}

} 

 1。把得到的分数转换成String类型。

2。通过getByTag的方式,得到刚才初始化过的那个分数。

3。给显示分数的那个Label设置当前分数。

4。a1,a2,a3算是实现了分数的滚动,改变过程中的时差,显得不是很突兀。

 

哦了,先说这么多。 来自tweejump 的code学习。

 

posted @ 2010-01-24 13:16  AlexLiu  阅读(3549)  评论(0编辑  收藏  举报