注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

vs-yanguo的博客

 
 
 

日志

 
 
 
 

CocosNode和Layer  

2010-09-27 19:20:45|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

CocosNode和Layer
开始学习Cocos2d-iphone, hello world示例程序简单的把一个Label类型的对象放到了Layer上,这个Layer是CocosNode的子类,让我们来看看这两个类的关系:

可以看到,Layer继承自CocosNode, 实现了TargetedTouchDelegate, StandardTouchDelegate 和 UIAccelerometerDelegate 三个protocol, CocosNode在cocos2d-iphone里面是个非常重要的元素,所有界面上看到的元素以及包含这些个元素的容器都是CocosNode子类,比较常用的有Scene, Layer, Sprite, Menu. 让我们逐个来熟悉它们。

CocosNode是一个类似于cocos touch 里面UIView的角色, 是大部分页面元素的基类, 它的子类即可以作为一个单独的元素也可以用做一个容器类元素, 这点跟 UIView是一样的.他的主要用途如下:

* 可以像UIView的用法一样的添加/删除/定位元素(addChild, getChildByTag, removeChild)
* 可以用来执行一些需要定期执行或者某一时间点执行的动作(schedule, unschedule), 这个特性可以用NSTimer来做, 但Cocos2d里面明确推荐用schedule(参见best practices), 另一个需要注意的地方是创建CocosNode最好放到init这种方法里面,尽量不要放到某个callback里面创建, 因为create一个CocosNode是很耗时的,尽量把需要的元素提前创建,而不是随用随创建.
* 可以在CocosNode里面执行动作action(runAction, stopAction).
* CocosNode本身不包含纹理(texture),所以也就没有size.
* CocosNode本身是不能相应touch时间或者accelerometer事件的,所以在他的子类里面必须事项相应的protocol,比如StandardTouchDelegate或者
TargetedTouchDelegate,来实现对触屏事件或者其他动作的相应.

所有CocosNode的子类都需要做一下几件事:
* 实现init方法, 在该方法里面初始化需要的资源, 定义好schedule.
* 实现draw方法, 绘制元素的内容.

关于CocosNode的更详细介绍可以参见CocosNode.h

回到hello word这个程序中来, 首先我们定义了一个Layer的子类HelloWord, 按照上面的介绍, 作为一个从CocosNode的子类, Layer类已经处理了init方法和draw方法的逻辑, 所以,在HelloWord这个类里面,我们只是简单的重载它的init, 放一个Label类进去, 其他的逻辑由Layer类自己处理.

代码里面有个Director类, 他来管理主窗口, 并负责各个场景的切换.

如果你运行过这个代码就会发现模拟器在运行的时候会自动转为landscape也就是横屏模式,这个效果就是由Director来控制的,试着这样做:

[Director sharedDirector].landscape = NO;

是不是又变回竖屏的了?

开始学习Cocos2d-iphone, hello world示例程序简单的把一个Label类型的对象放到了Layer上,这个Layer是CocosNode的子类,让我们来看看这两个类的关系:

可以看到,Layer继承自CocosNode, 实现了TargetedTouchDelegate, StandardTouchDelegate 和 UIAccelerometerDelegate 三个protocol, CocosNode在cocos2d-iphone里面是个非常重要的元素,所有界面上看到的元素以及包含这些个元素的容器都是CocosNode子类,比较常用的有Scene, Layer, Sprite, Menu. 让我们逐个来熟悉它们。

CocosNode是一个类似于cocos touch 里面UIView的角色, 是大部分页面元素的基类, 它的子类即可以作为一个单独的元素也可以用做一个容器类元素, 这点跟 UIView是一样的.他的主要用途如下:

* 可以像UIView的用法一样的添加/删除/定位元素(addChild, getChildByTag, removeChild)
* 可以用来执行一些需要定期执行或者某一时间点执行的动作(schedule, unschedule), 这个特性可以用NSTimer来做, 但Cocos2d里面明确推荐用schedule(参见best practices), 另一个需要注意的地方是创建CocosNode最好放到init这种方法里面,尽量不要放到某个callback里面创建, 因为create一个CocosNode是很耗时的,尽量把需要的元素提前创建,而不是随用随创建.
* 可以在CocosNode里面执行动作action(runAction, stopAction).
* CocosNode本身不包含纹理(texture),所以也就没有size.
* CocosNode本身是不能相应touch时间或者accelerometer事件的,所以在他的子类里面必须事项相应的protocol,比如StandardTouchDelegate或者
TargetedTouchDelegate,来实现对触屏事件或者其他动作的相应.

所有CocosNode的子类都需要做一下几件事:
* 实现init方法, 在该方法里面初始化需要的资源, 定义好schedule.
* 实现draw方法, 绘制元素的内容.

关于CocosNode的更详细介绍可以参见CocosNode.h

回到hello word这个程序中来, 首先我们定义了一个Layer的子类HelloWord, 按照上面的介绍, 作为一个从CocosNode的子类, Layer类已经处理了init方法和draw方法的逻辑, 所以,在HelloWord这个类里面,我们只是简单的重载它的init, 放一个Label类进去, 其他的逻辑由Layer类自己处理.

代码里面有个Director类, 他来管理主窗口, 并负责各个场景的切换.

如果你运行过这个代码就会发现模拟器在运行的时候会自动转为landscape也就是横屏模式,这个效果就是由Director来控制的,试着这样做:

[Director sharedDirector].landscape = NO;

是不是又变回竖屏的了?

  评论这张
 
阅读(2089)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018