最后就是要完成前面设定的第3件事:如果玩家赌对了则赢钱,反之输钱.
前面的框架搭的差不多了,所以这里实现起来也就不难了 ;)
首先我们怎么知道用户输入完毕,然后关闭窗口了?只有在这个点上GameScene才能做下一步操作,比如将实例变量_isBeted置为YES.
一个可能的方法是创建一个回调协议,在GameScene实现该协议.一旦菜单窗口关闭就调用协议中的方法.
因为这个例子中的菜单窗口不多,回调也不复杂.所以我们用另一种方法,就是给每个弹出窗口赋予一个唯一的名字,然后在GameScene的removePopup中做判断,从而执行对应的代码.
打开SpriteBuilder,给moneyLayer窗口指定一个名字moneyLayer:
回到GameScene修改removePopup方法如下:
-(void)removePopup{
if (_popupLayer) {
NSString *popupName = _popupLayer.name;
[_popupLayer removeFromParent];
_popupLayer = nil;
self.userInteractionEnabled = YES;
if ([popupName isEqualToString:@"moneyLayer"]) {
[self moneyLayerReturnCallback];
}else if([popupName isEqualToString:@"gameoverLayer"]){
[self gameoverLayerReturnCallback];
}
}
}
后面else判断的是其他窗口,这里可以先略过.
然后实现moneyLayerReturnCallback方法:
-(void)moneyLayerReturnCallback{
//GameState *gameState = [GameState sharedInstance];
[self updateGambleState];
_isBeted = YES;
}
里面怎么又有一个updateGambleState方法!?这就是前面用来实现显示每轮比赛压赌状态功能的啊.实现如下:
static NSString *GambleFormat = @"余额:%d 赌金:%d 选手:%d";
-(void)updateGambleState{
GameState *gameState = [GameState sharedInstance];
NSString *msg = [NSString stringWithFormat:GambleFormat,gameState.totalMoney,gameState.money,_betPlayer];
[_interface updateGambleLabel:msg];
}
这就是前面的图片最上方的内容的实现.