`

cocos2d子层访问父层的三种方法

    博客分类:
  • IOS
IOS 
阅读更多

情景设定:父层HelloWorldLayer有一个方法-(void) setlable;需要被其子层SecondLayer访问。

第一种、半单例方法:

首先在HelloWorldLayer.h声明+(HelloWorldLayer*) shareLayer

+(HelloWorldLayer*) shareLayer;

然后在HelloWorldLayer.m加入:

#import "SecondLayer.h"static HelloWorldLayer* HelloWorldLayerInstance;+(HelloWorldLayer*) shareLayer{    return HelloWorldLayerInstance;}-(id) init{    // always call "super" init    // Apple recommends to re-assign "self" with the "super" return value    if( (self=[super init])) {        HelloWorldLayerInstance=self;                SecondLayer* sl=[[SecondLayer alloc] init];        sl.tag=10;        [self addChild:sl z:100];        self.isTouchEnabled=YES;                ////.................           }    return self;}-(void) setlable{    clickNum++;    [label setString:[NSString stringWithFormat:@"ParentLayer clickNum:%i",clickNum]];}

在SecondLayer就可以通过这样的方式来访问HelloWorldLayer的-(void) setlable方法:

[[HelloWorldLayer shareLayer] setlable];

第二种、self.parent强制访问方法:

HelloWorldLayer中只需按正常添加子层SecondLayer即可(HelloWorldLayer.m中):

-(id) init{    // always call "super" init    // Apple recommends to re-assign "self" with the "super" return value    if( (self=[super initWithColor:ccc4(0, 255, 255,255)])) {        HelloWorldLayerInstance=self;                SecondLayer* sl=[[SecondLayer alloc] init];        sl.tag=10;        [self addChild:sl z:100];        self.isTouchEnabled=YES;                ////.................           }    return self;}

在SecondLayer就可以通过这样的方式来访问HelloWorldLayer的-(void) setlable方法:

[(HelloWorldLayer*)self.parent setlable];

第三种、协议委托方法:

在SecondLayer.h中加入:

#import <Foundation/Foundation.h>#import "cocos2d.h"@protocol callParentDelegate <NSObject>-(void) setlable;@end@interface SecondLayer : CCLayer{    id<callParentDelegate> delegate;}@property(nonatomic,retain) id<callParentDelegate> delegate;@end
SecondLayer.m中@synthesize delegate;

然后在HelloWorldLayer.h中加入<callParentDelegate>协议:

@interface HelloWorldLayer :CCLayer <callParentDelegate>{    CCLabelTTF *label;    int clickNum;}

在HelloWorldLayer.m中实现:

-(void) setlable{    clickNum++;    [label setString:[NSString stringWithFormat:@"ParentLayer clickNum:%i",clickNum]];}

在添加SecondLayer子层注意设子委托:

        SecondLayer* sl=[[SecondLayer alloc] init];        sl.tag=10;        sl.delegate=self;        [self addChild:sl z:100];        self.isTouchEnabled=YES;

在SecondLayer就可以通过这样的方式来访问HelloWorldLayer的-(void) setlable方法:

[self.delegate setlable];

还有更好的办法,欢迎各位交流!
分享到:
评论

相关推荐

    cocos2d中的层以及层之间的传值

    5. **父类-子类关系**:如果层之间存在父子关系,父层可以直接访问子层的属性或方法,反之亦然。但这种方法不推荐用于跨级通信,因为可能会导致耦合度过高。 6. **单例模式**:创建一个全局的单例对象来存储和管理...

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-x 三消游戏源码

    本源码分享是基于Cocos2d-x 3.8版本实现的一个三消游戏,三消游戏,又称消消乐,是一种常见的休闲益智游戏类型,玩家通过交换相邻的元素来达成三个或以上相同元素的连通消除。 在Cocos2d-x中开发游戏,主要涉及以下...

    cocos2d-x 3.0

    cocos2d-x 3.0中的cc::Animate类可以轻松管理这些帧,通过`createWithFrames`方法创建动画,并使用`runAction`将动画添加到精灵上。 3. 物理引擎:如果游戏需要更真实的物理效果,比如重力、碰撞检测,可以集成Box...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    1. **Cocos2d-x入门**:介绍Cocos2d-x的基本架构,包括场景(Scene)、层(Layer)、节点(Node)等概念,以及如何设置项目环境,创建和管理游戏资源。 2. **图形与动画**:讲解如何使用Cocos2d-x的绘图API绘制2D...

    cocos2d-android.jar.zip_CoCos2d_android jar_android game_cocos2d

    cocos2d-android游戏引擎是著名游戏引擎cocos2d游戏引擎的Android版。cocos2d-android游戏引擎性能优越、易学、可以进行纯java编程、具有极高的研 究价值、大大的降低了开发者的学习成本。您只需要一台普通配置的...

    cocos2d的学习资料

    Cocos2d是一款广泛应用于游戏开发、图形界面和2D应用程序的开源框架,它支持多种编程语言,包括Python(cocos2d),Objective-C(cocos2d-objc)以及C++(cocos2d-x)。这篇学习资料是针对cocos2d/x,特别是cocos2d-...

    Cocos2d-JS游戏开发

    Cocos2d-JS是一款强大的2D游戏开发框架,它结合了JavaScript的灵活性与Cocos2d-x的高效性能,让开发者能够轻松地创建跨平台的游戏。本篇将深入探讨Cocos2d-JS的游戏开发知识,从基础到进阶,帮助你掌握这一利器。 ...

    cocos2d学习资源汇总

    * API文档:cocos2d-x提供了详细的API文档,涵盖了引擎的所有类、方法、变量等方面的内容。 二、博客文章 * supersuraccoon的博客:提供了详细的cocos2d-x教程、实践经验和解决方案。 * himi的博客:提供了详细的...

    cocos2d-x json字符串与cocos2d::Value转换工具

    该资源主要用于cocos2d-x中Value与json字符串的相互转换,提供从json文件读取为cocos2d::Value,cocos2d::Value写入到文件,cocos2d::Value转换为json字符串,json字符串转换为cocos2d::Value。json字符串转换成cocos...

    cocos2d游戏引擎

    在cocos2d的文件列表中,“cocos2d-master”可能是一个包含cocos2d源代码的主分支,这通常意味着用户可以获取到最新、最完整的cocos2d项目,包括所有必要的子模块、示例项目、文档和构建脚本。对于开发者而言,这...

    Cocos2d-x实战 JS卷

    1. **Cocos2d-x架构**:理解Cocos2d-x的组件系统,包括Scene(场景)、Layer(层)、Sprite(精灵)、Node(节点)等,以及它们在游戏中的作用和交互方式。 2. **JavaScript绑定**:Cocos2d-x如何将C++底层库与...

    cocos2d 入门教程

    cocos2d 是基于Objective-C的,它提供了丰富的图形绘制能力,包括精灵(Sprites)、层(Layers)、场景(Scenes)、动作(Actions)等。cocos2d 的设计目标是简化游戏开发流程,让开发者可以专注于游戏逻辑,而不是...

    Cocos2d-x实战C++卷关东升著完整版pdf

    《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...

    android cocos 2D范例

    2. **游戏场景(Scene)与层(Layer)**: 在Cocos2D中,游戏世界被组织成场景和层的概念。场景是一个完整的游戏状态,而层则是场景中的独立部分,可以包含不同的游戏元素。在这个范例中,可能会有一个场景包含了游戏...

    Cocos2d-html5

    10. **samples**:更多的示例项目,展示各种功能的使用方法,帮助开发者理解和学习Cocos2d-html5的API。 通过Cocos2d-html5,开发者可以利用WebGL进行硬件加速的图形渲染,结合JavaScript的动态特性,实现复杂的...

    cocos2d-x windows vs2010配置

    三、运行 Cocos2d-x 生成解决方案完成之后,如果成功,这时你已经距离完全成功一大半了,接下来,你可以运行一下 Cocos2d-x,看看效果。右建点击解决方案管理中的 HelloWorld 项目,然后设置为启动项目,然后从上面...

    Cocos2d的API

    Cocos2d的API文档通常包含详细的技术指导、类库参考以及方法描述,为开发者提供了一个高效索引的资料库。 在描述中提到的"chm"格式文件是一种Microsoft编写的帮助文件格式,全称为Compiled HTML Help,它可以将HTML...

    cocos2d播放视频方法相关

    在Cocos2d游戏开发框架中,播放视频功能是通过扩展模块来...总的来说,Cocos2d-iOS通过引入第三方扩展和利用系统框架,实现了在游戏场景中播放视频的功能。理解这一过程对于开发交互性强、内容丰富的游戏是至关重要的。

    cocos2d-android jar包全套.zip

    Cocos2d是一款开源的游戏开发框架,被广泛用于创建2D游戏、演示程序和其他互动内容。在Android平台上,Cocos2d-x是一个基于C++的版本,提供了原生的编程接口,同时也支持Java API,方便Android开发者使用。"cocos2d-...

Global site tag (gtag.js) - Google Analytics