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

本文介绍使用Cocos2d游戏引擎实现分数显示的方法。包括准备数字图片与fnt文件,初始化分数显示,并通过更新分数字符串来实现得分变化时的动画效果。

在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 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学习。






转载于:https://www.cnblogs.com/pengyingh/articles/2388471.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值