(NO.00001)iOS游戏SpeedBoy Lite成形记(十六)
接上篇,我们实现菜单窗口的弹出和关闭功能,首先在打开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,我们下一篇就来实现它 ;)
(NO.00001)iOS游戏SpeedBoy Lite成形记(十六)的更多相关文章
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十八)
现在需要实现具体的游戏逻辑大致如下: 玩家点击某条赛道选择一个选手,然后会弹出菜单窗口让玩家输入压赌的金额,如果输入的金额值非法,则在GameInterface下部的状态栏中显示提示,要求玩家重新输入 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十九)
最后就是要完成前面设定的第3件事:如果玩家赌对了则赢钱,反之输钱. 前面的框架搭的差不多了,所以这里实现起来也就不难了 ;) 首先我们怎么知道用户输入完毕,然后关闭窗口了?只有在这个点上GameSce ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十五)
现在啃第2个问题:如何让玩家输入赌注金额. 实现的方法有很多种,比如可以限制玩家只能从特定的金额中选择,把每个选择做成一个按钮即可.以下是一个假想选择窗口的示意图: 这样没有玩家的输入问题了.缺点是不 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十四)
下面要启用场景的触摸功能,在GameScene.m的didLoadFromCCB方法里添加下面一行: self.userInteractionEnabled = YES; 然后还需要给GameScen ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十二)
如果选手能在加速的时候屁股产生推进器效果就跟好了,仿佛选手腾云驾雾的感觉.我们可以用Cocos2D中的CCMotionStreak类来轻松实现.下面在Player.h接口文件添加以下代码: @prop ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十)
上篇最后遇到是神马问题呢? 原来由于现在seq动作的时间变得不确定了,jump的持续时间不能对应发生变化,导致可能选手在比赛后边就没有跳跃动作了!这虽不影响整个代码逻辑,却多少有些让玩家不爽. 一种解 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(一)
这是本猫第一个原创iOS游戏,留此为证!看编号貌似要写9万多个,千锤百炼还是太少吧!? ;) 这是一个赛跑游戏,几位选手从起点跑到终点看谁用的时间最少.现在需要实现的功能是: 1.8位选手从起点移动至 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3
在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了. 我只需要再实现一 ...
- (NO.00001)iOS游戏SpeedBoy Lite成形记(十一)
之前的10篇内容主要实现了选手从起点移动至终点的动作,比较随机的模拟了选手的速度变化,另外完成了选手到达终点时该做的事情. 接下来的几篇中我们进一步完善SpeedBoy Lite项目,使它真正成为一个 ...
随机推荐
- URL重定向漏洞,python打造URL重定向漏洞检测脚本
前言: 今天学习了重定向漏洞,这个漏洞比较好理解 漏洞名:URL重定向漏洞 威胁:低 漏洞的来源:开发者对head头做好对应的过滤和限制 例子: 有漏洞的网站:http://a.com/x.php?u ...
- PHP Libxml 函数
PHP Libxml 简介 Libxml 函数和常量与 SimpleXML.XSLT 以及 DOM 函数一起使用. 安装 这些函数需要 Libxml 程序包. 在 xmlsoft.org 下载 PHP ...
- Docker常见仓库MySQL
MySQL 基本信息 MySQL 是开源的关系数据库实现. 该仓库提供了 MySQL 各个版本的镜像,包括 5.6 系列.5.7 系列等. 使用方法 默认会在 3306 端口启动数据库. $ sudo ...
- OpenCV+VS2013 属性表配置
简介 计算机视觉任务越来越多的依赖著名的开源计算机视觉库OpenCV.OpenCV 2.0 包含了一系列精心设计数据结构和经过优化的视觉算法,大家可以短时间内开发一个不错的视觉应用.OpenCV支持多 ...
- TCP发送源码学习(3)--tcp_transmit_skb
一.tcp_transmit_skb static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, g ...
- hadoop入门级总结一:HDFS
虽然hadoop经历了多年的发展,作为技术人员都或多或少的使用过或者了解过.这里还是做一个简单的总结,主要原因是之前主要是做hadoop的开发,对hadoop的运维知之甚少,但真正的接触到hadoop ...
- Mongo DB 初识
前言 2016年伊始,开始研究NoSql.看了couchdb,cloudant,cassandra,redis.却一直没有看过排行榜第一的mongo,实属不该.近期会花时间研究下mongo.本文是初识 ...
- [CSDN_Markdown]Markdown基本语法2
简介 前文 Markdown基本语法 中介绍了Markdown的基本语法,知道那些基本的语法,实际上已经可以写纯文本的博客了.对我们这群写代码的人或者将要写代码的人来说,貌似这些还不够,我们还希望能插 ...
- 搭建ejabberd集群
搭建ejabberd集群(金庆的专栏 2016.8)以2台机器搭建一个ejabberd集群.2台机器都是外网一块网卡,内网另一块网卡.新建一个域名,添加2台机器的外网IP.分别用源码安装ejabber ...
- Scheme N皇后
(define (range n) (define (recur n) () '() (cons n (recur (- n ))))) (recur (- n ))) (define (flatte ...