为了能让玩家可以在比赛结束时清楚看到每位选手的成绩,我们需要在GameScene场景的track对象中添加一些新的元素.
在SpriteBuilder中打开GameScene.ccb,创建1个标签对象,使其成为track的子对象.注意不是GameScene根节点的子对象哦.
修改该标签的位置使其差不多位于第1赛道的后半场跑道中,比如我将其放在相对于父对象的(60%,3%)位置上.按照个人喜好修改字体和文字大小.
觉得比较满意时,将该label复制7次,同样是它们成为track的子对象.这样track一共包含了8个标签对象.
修改新添加标签的位置,按照1/8的倍数累加,别忘了最后要加上3%,最后的效果如下:
给这8个标签设置代码链接,分别为:_labelTrack1至_labelTrack8.
因为链接位置是Doc root var,所以它们都成为GameScene的实例对象而不是track的实例变量.再说我们也没有创建Track类.
下面回到Xcode中,打开GameScene.m新增对应的实例变量:
CCLabelTTF *_labelTrack1;
CCLabelTTF *_labelTrack2;
CCLabelTTF *_labelTrack3;
CCLabelTTF *_labelTrack4;
CCLabelTTF *_labelTrack5;
CCLabelTTF *_labelTrack6;
CCLabelTTF *_labelTrack7;
CCLabelTTF *_labelTrack8;
NSMutableArray *_labelArray;
顺便说一句,这里只有8个变量,所以手动添加还过得去.如果在SpriteBuilder中建立了成百上千的变量,还在这一个个手动添加就太傻了.
这时,一种办法是我们可以使这些变量成为某一自定义类的实例,然后在GameScene初始化方法中用Obj-C类的比较方法遍历其所有子对象,从而将所有符合该自定义类的对象过滤出来.以后有机会可以展示一下,这里就手动添加吧.
在GameScene的didLoadFromCCB方法中将这些标签添加到数组中去:
[_labelArray addObject:_labelTrack1];
[_labelArray addObject:_labelTrack2];
[_labelArray addObject:_labelTrack3];
[_labelArray addObject:_labelTrack4];
[_labelArray addObject:_labelTrack5];
[_labelArray addObject:_labelTrack6];
[_labelArray addObject:_labelTrack7];
[_labelArray addObject:_labelTrack8];
[self invisibleAllLabels];
因为这些标签应该只在比赛结束时显示出来,所以游戏开始和每次比赛开始需要将其设为不可见,所以单独写一个方法干这事:
-(void)invisibleAllLabels{
for (CCLabelTTF *label in _labelArray) {
label.visible = NO;
}
}
下面我们要改动matchRun方法了,待会见 ;)