博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【吼吼睡cocos2d学习笔记】第六章 - cocos2d中的层以及层之间的传值
阅读量:7190 次
发布时间:2019-06-29

本文共 1973 字,大约阅读时间需要 6 分钟。

游戏必然涉及到多层,层的操作是IOS开发中至关重要的一环,其中涉及到的东西很多很碎,但是我认为,以下几点需要我们格外注意:

层的分割技巧

层的组织

层的事件处理

层之间的通信

 

本例涉及到了3个层:AllInmeLayer,GameLayer,UserInterfaceLayer

GameLayer中包含了地图、游戏精灵。

UserInterfaceLayer中提供了用户交互的功能。

AllinmeLayer层本身没有视觉效果,其实以上两个层是作为子节点放到本层中的,本层中也提供了对这两个层的访问和通信。

 

和一个场景:LoadingScene

这只是一个过渡场景,详见第五章。

 

本例的

启动界面:

点击UI层,旋转游戏层。

毫无疑问,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层存在的价值。

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/pengyingh/articles/2393203.html

你可能感兴趣的文章
poj 2154 Color——带优化的置换
查看>>
Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式'](转)
查看>>
asp.net 服务器 上传文件到 FTP服务器
查看>>
ZooKeeper学习第一期---Zookeeper简单介绍
查看>>
Mybatis(spring)(多个参数)(插入数据返回id)
查看>>
操作系统学习笔记三 进程
查看>>
Map的嵌套使用
查看>>
实习公司的开发环境搭建教程
查看>>
Linux busybox mount -a fstab
查看>>
Dijkstra
查看>>
property测试代码:
查看>>
[C# | WinCE | Solution] 在 WinCE 上访问 SSL 加密后的 WCF SOAP 服务接口出现“未能与远程服务器建立信任关系”...
查看>>
css2D转换和3D转换
查看>>
synchronized关键字的用法总结
查看>>
用C实现一个简单的对拍器——致每个曾经为求AC披星戴月的程序员们
查看>>
C++的const类成员函数
查看>>
js 事件驱动机制
查看>>
进程相关内容
查看>>
框架,样式
查看>>
SqlServer2005通过出生日期算年龄函数
查看>>