(NO.00001)iOS游戏SpeedBoy Lite成形记(十六)
来源:互联网 发布:中文logo设计软件 编辑:程序博客网 时间:2024/06/03 19:39
接上篇,我们实现菜单窗口的弹出和关闭功能,首先在打开GameScene.m,添加必要的实例变量:
__weak PopupLayer *_popupLayer;
再添加2个新方法:
-(void)removePopup{ if (_popupLayer) { NSString *popupName = _popupLayer.name; [_popupLayer removeFromParent]; _popupLayer = nil; self.userInteractionEnabled = YES; }}-(void)showPopupNamed:(NSString*)popupName{ if (!_popupLayer) { PopupLayer *newPopupLayer = (PopupLayer*)[CCBReader load:popupName]; NSAssert(newPopupLayer, @"%@ popupLayer must not nil",popupName); newPopupLayer.scale = 0.f; [self addChild:newPopupLayer]; _popupLayer = newPopupLayer; _popupLayer.gameScene = self; self.userInteractionEnabled = NO; CCActionScaleTo *scaleAction = [CCActionScaleTo actionWithDuration:0.5 scale:1.0f]; [_popupLayer runAction:scaleAction]; }}
代码很简单,打开窗口时首先确保没有窗口已经被打开,然后按名称加载窗口,关闭GameScene节点与用户的交互功能,然后用放大动画从无显示弹出的菜单窗口.
关闭窗口时,首先确保当前有窗口被打开,然后恢复打开窗口方法里的动作.
因为我们要从外部调用GameScene类的方法,所以要修改接口文件:
-(void)removePopup;-(void)showPopupNamed:(NSString*)popupName;
接下来打开PopupLayer.h文件,在import语句下方添加:
@class GameScene;
这里不用#import “GameScene.h”,为的是避免可能的重复包含头文件.在接口声明中添加一个新属性:
@property (nonatomic,strong) GameScene *gameScene;
下面打开PopupLayer.m文件补全之前留空的回调方法:
-(void)moneyEntered{ NSString *text = _moneyText.string; CCLOG(@"text is %@",text); @try { self.money = text.intValue; } @catch (NSException *exception) { CCLOG(@"exception is %@",exception.debugDescription); }}-(BOOL)isMoneyValid{ if (self.money <= 0) { return NO; }else if (self.money > [GameState sharedInstance].totalMoney) return NO; else return YES;}-(void)closePopup{ CCLOG(@"%@",self.name); if ([self.name isEqualToString:@"moneyLayer"]) { self.money = _moneyText.string.intValue; if (![self isMoneyValid]) { GameState *gameState = [GameState sharedInstance]; [gameState.interface updateStatusLabel:@"主上您压上的银两不够啊 ;)"]; return; } GameState *gameState = [GameState sharedInstance]; gameState.money = self.money; } [self.gameScene removePopup];}
大家现在编译肯定会出错的,因为里面有一个陌生的类GameState,我们下一篇就来实现它 ;)
0 0
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十六)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二十六)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(一)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(二)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(三)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(四)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(五)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(六)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(七)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(八)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(九)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十一)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十二)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十三)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十四)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十五)
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十七)
- 关于函数的call和applay
- Linked List Cycle
- C++
- xshell不能连接VM中的ubuntu
- 深入理解Android之AOP
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十六)
- 不是每次做坏事都会被发现之——嵌入式编程中的内存管理
- kill 、killall、pkill、xkill pgrep ps 命令解释 2015年10月24日
- Linux的环境变量设置
- C++迭代器 iterator
- Android网络技术之WebView控件
- 2015-2016 ACM-ICPC, NEERC, Moscow Subregional Contest C题:Colder-Hotter [三分/交互题]
- 关于一些错误指示
- javascript中作用域和作用域链的例子