第一步:新增一个用于显示分数的角色
1、右键点击Actor,选择New subclass…
2、输入名称Score,确定
3、编辑Myworld程序,在游戏开始时添加Score角色
addObject(new Score(), 300, 100);
4、编辑Score角色代码,添加一个变量score用来记录得分,然后显示在世界里。
public static int score;//计分变量
public Score(){
score = 0;//初始化为0
}
public void act(){
World myWorld = getWorld();
myWorld.showText(String.valueOf(score), 300, 100);//在世界中显示变量值
}
//计分操作
public static void add(int num){
score += num;
}
4、划重点,这一步就是要判断何时加分。
思路:如果小鸟水平位置已经穿越了Pipe,也就是水平位置与管子发生了碰撞,并且变量alive==true(还活着),就可以加一分。
编辑Flappybird角色代码,先增加一个变量isacross,标记是否在穿越管子:
private boolean isacross = false;
然后在碰撞检测里添加代码,如果水平发生碰撞,修改这个值,表示已经开始穿越了。
接下来,在Act方法里增加代码,判断是否可以加分。
if(isacross && isalive){
Score.add(1);
}
目前看来一切就绪,运行一下看看效果。
问题出现了,只要小鸟开始穿越管子,就开始不停的加分,这是因为每次执行act方法时,只要满足条件都会加分,所以,我们的限制条件还要再增加一个,那就是如果是同一根管道,加过一次分就不再重复计分。
再新增一个变量,private boolean hasaddscore = false; //初始值表示还没加过分
修改Act方法中的加分判断代码,完整的Act方法如下图所示:
这样我们的计分功能就完成了,核心修改的就是碰撞检测和Act判断计分两处。
原创内容,谢绝转载!
本站内容未经许可,禁止任何网站及个人进行转载。