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;
是不是又变回竖屏的了?
评论