【吼吼睡cocos2d学习笔记】第六章 - cocos2d中的层以及层之间的传值
来源:互联网 发布:识别图片的软件 编辑:程序博客网 时间:2024/06/09 15:46
游戏必然涉及到多层,层的操作是IOS开发中至关重要的一环,其中涉及到的东西很多很碎,但是我认为,以下几点需要我们格外注意:
层的分割技巧
层的组织
层的事件处理
层之间的通信
本例涉及到了3个层:AllInmeLayer,GameLayer,UserInterfaceLayer
GameLayer中包含了地图、游戏精灵。
UserInterfaceLayer中提供了用户交互的功能。
AllinmeLayer层本身没有视觉效果,其实以上两个层是作为子节点放到本层中的,本层中也提供了对这两个层的访问和通信。
和一个场景:LoadingScene
这只是一个过渡场景,详见第五章。
本例的演示动画
启动界面:
点击控制层,旋转游戏层
毫无疑问,AllinmeLayer是本例中的一个关键层,下面我们分析一下他的代码,首先看.h中:
//定义了2个只读属性,返回gameLayer和UserInterfaceLayer对象@property(readonly)GameLayer* gameLayer;@property(readonly)UserInterfaceLayer* UILayer;看注释。
这两个属性的实现在.m中:
//gameLayer属性的读取器-(GameLayer *)gameLayer{ CCNode *node = [self getChildByTag:TAGGAMELAYER]; return (GameLayer *)node;}//UILayer属性的读取器-(UserInterfaceLayer *)UILayer{ CCNode *node = [self getChildByTag:TAGUSERINTERFACE]; return (UserInterfaceLayer *)node;}
这两个方法非常简单,其实就是封装了getChildByTag,需要注意的是这里使用了几个enum成员,定义如下:
//将本例中用到的tag,以enum的形式定义到此处,正式开发中精灵、动作、层的tag应该分开写。typedef enum { TAGGAMELAYER, TAGUSERINTERFACE, TAGUIFRAMESPRITE, TAGACTIONROTATE}TAGID;
思考:属性需要对象来访问,在其他层中我们如何才能高效的生成AllinmeLayer的对象呢?本例中使用了一个静态方法来实现:
//本静态方法向外部提供了本例的一个对象//在其它层中可以通过该对象访问gameLayer和UILayer属性。+(AllinmeLayer *)getShared{ return sharedAllInMe;}
该方法中的sharedAllinMe是一个静态成员,在init方法中用self赋值。
在init方法中将GameLayer和UserInterfaceLayer作为子节点添加到自己中:
//将两个层作为子节点加到本层中 CCLayer *gameLayer = [GameLayer node]; [self addChild:gameLayer z:1 tag:TAGGAMELAYER]; CCLayer *userInterface = [UserInterfaceLayer node]; [self addChild:userInterface z:2 tag:TAGUSERINTERFACE];
注意z轴的顺序,UI层在上方,所以使用的更大的z值。
GameLayer层没有什么好说的,无非就是精灵和随机移动,以及几个CGPoint的操作,我都有详细的注释。
UserInterFaceLayer层ccTouchBegan方法中的这行代码是本章的关键:
//此行代码是本例的关键,实现了层之间的引用 GameLayer *gameLayer = [AllinmeLayer getShared].gameLayer;
[AllinmeLayer getShared] 获取了AllinmeLayer的对象。
对象.gameLayer引用到了该对象的只读属性。
就是通过这种方式在一个层中访问到了另一个层,这也个AllinmeLayer层存在的价值。
代码下载
------
- 【吼吼睡cocos2d学习笔记】第六章 - cocos2d中的层以及层之间的传值
- 【吼吼睡cocos2d学习笔记】第二章 - 开始学习
- 【吼吼睡cocos2d学习笔记】第五章 - loading场景以及其他
- 【吼吼睡cocos2d学习笔记】第三章 - 基础知识
- 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏
- 【吼吼睡cocos2d学习笔记】第一章 - 介绍cocos2d
- 【吼吼睡cocos2d学习笔记】第七章 - 4个很酷的类
- cocos2d-x学习笔记—自定义弹出层
- Cocos2d - x学习笔记 [1] 导演、舞台、精灵、层
- cocos2d-x学习笔记【二】导演、场景、层。精灵介绍
- cocos2d-x:导演,场景,层,以及精灵的介绍
- cocos2d-x 3.0 导演,场景,层,以及精灵的介绍
- Cocos2d-x学习笔记(四) 布景层的添加移除
- Cocos2d-x 游戏中的遮挡层
- cocos2d-x学习之层的触摸消息响应
- cocos2d-x学习之层的触摸消息响应
- cocos2d-iphone之魔塔20层第六部分
- cocos2d-android学习三 ---- 创建布景层
- android2.3.4 fsl imx51编译遇到的问题总结
- 在Centos上安装RabbitMQ流程
- J2EE 一次清除所有的session
- Android UI之ProgressBar(进度条)
- simple model fitting using R
- 【吼吼睡cocos2d学习笔记】第六章 - cocos2d中的层以及层之间的传值
- oracle 单表流复制 stream
- MFC Activex Control
- 常用uri
- ubuntu环境下编译内核详解
- ASP.NET学习路线图
- 《深度探索C++对象模型》第五章Semantics of Construction,Destruction, and Copy_学习笔记
- [人事管理系统] JTable的列宽与内容的自适应
- sql server面试题实例