(原)cocos2d笔记——解析HelloWorldScene

HelloWorldScene类是纯coocs2d代码显示Hello World标签的地方。在开始深入这个之前,你要先明白cocos2d使用了一个CCNode对象层级来确定在什么地方显示什么东西。所有node的基类是CCNode类,CCNode类是所有其他node类的父类,包括两个最基本要素:CCScene和CCLayer。

CCScene是一个抽象概念,只做一件事——根据对象的像素坐标给予对象在场景中的正确位置。CCScene node一直被用作cocos2d场景层级的父对象。

CCLayer类除了提供触摸和加速器输入外基本没干什么事,你通常会将作为第一个类添加到CCScene中,仅因为绝大多数的游戏至少要有简单的触摸输入.如果你打开HelloWorldScene.h头文件,你会发现HelloWorld类源自CCLayer。

因为CCScene只不过是个抽象概念,所以设置场景的默认方式就是在你的类中使用静态初始化器+(id) scene 。这个方法创建了一个常规的CCScene对象并向场景中添加了一个你的类的实例。绝大多数情况下,那是CCScene创建和使用的唯一地方。接下来是一个+(id) scene方法的普通例子。

 
  
+ (id) scene {
CCScene
* scene = [CCScene node];
id node
= [HelloWorld node];
[scene addChild:node];
return scene;
}

来到下面代码中的-(id) init犯法,你会注意到有些地方很奇怪:self被指定为返回值,这个返回值通过self = [super init]中发送给super对象的init消息得来,如果你有C++背景,看到这个一定会痛苦得打哆嗦。不要太心烦,没关系的。它只意味着在Object-C中我们必须手工调用父类得init方法。没有对父类的自动调用。我们必须指定self为[super init]的返回值,因为它可能会返回nil。

-(id) init
{
if ((self = [super init])) {
// create and initialize a label
CCLabel* label = [CCLabel labelWithString:@"Hello World" fontName:@"Marker Felt" fontSize:64];
// get the window (screen) size from CCDirector 
CGSize size = [[CCDirector sharedDirector] winSize];
// position the label at the center of the screen
label.position = CGPointMake(size.width / 2, size.height / 2);
// add the label as a child to this Layer
[self addChild: label]; } return self; }
现在让我解释一下标签是怎么加入到场景中的。如果你再看一下上面代码的init方法,你会看到init的一个静态初始化方法创建了一个CCLabel对象,它返回了一个新的CCLabel类的对象,这是个自动释放对象。为了使得init方法结束后不再占用内存,你必须将标签作为孩子添加到self中,这个通过调用[self addChild:label]消息的方式完成。在上面代码所示的方法体里面,标签被指定在屏幕中心的位置。注:你指派位置在调用addChild前还是后没有关系。

转载于:https://www.cnblogs.com/ylucy/archive/2011/02/22/1961656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值