在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
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 kBonus10: score += 10000; break;
case kBonus50: score += 50000; break;
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学习。