最后就是要完成前面设定的第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]; }
这就是前面的图片最上方的内容的实现.