Cocos2d中几种常用类简介

来源:互联网 发布:非递归后序遍历c语言 编辑:程序博客网 时间:2024/05/17 08:49
原文地址:Cocos2d中几种常用类简介作者:伤心的小果冻

TheDirector(导演) CCDirector类,简称Director(导演),是cocos2d游戏引擎的核心。Director是一个单例:它保存着cocos2d的全局配置设定,同时管理着cocos2d的场景。

Director的主要用处如下:
1. 访问和改变场景
2. 访问cocos2d的配置细节
3. 访问视图(OpenGL,UIView,UIWindow) 4. 暂停,恢复和结束游戏

5.在UIKit和OpenGL之间转换坐标

实际上存在四种类型的Director。它们在细节上有所不同。最常用的Director是CCDisplayLinkDirector,它的内部使用了苹果的CADisplayLink类。它是最好的选择,但是只有在iOS3.1以上的版本中才能使用。其次,你可以使用 CCFastDirector。如果你想让CocoaTouch视图和cocos2d一同工作,你必须转到CCThreadedFastDirector,因为只有这个Director才能完全支持。CCThreadedFastDirector不好的一面是:使用它会很耗电。最后的选择是CCTimerDirector,但这是没有办法的选择,因为它是四种Director里面最慢的。

场景图(The SceneGraph) 有时候又被称为“场景层级”。场景图是由所有目前活跃的cocos2d节点所组成的一个层级图。除了场景本身,每一个节点只有一个父节点,但是可以有任意数量的子节点。

当你将节点添加到其它节点中时,你就在构建一个节点场景图。图3-1描绘了一个虚构的游戏场景图。在最上面,你总是放置场景节点(MyScene),通常跟着的是一个层节点(MyLayer)。在cocos2d里,层节点的作用是接收触摸和加速计的输入。

[转载]Cocos2d中几种常用类简介

图3-1.一个简化的由多个不同节点组成的cocos2d场景图。场景图中有一个玩家节点和他的武器节点,游戏的得分,和游戏中用于暂停和改变游戏选项的菜单。


在CCLayer下一层的是你游戏的组成要素,它们大多数是精灵(sprite)节点。它们包括用于显示游戏得分的标签节点,用于显示游戏内菜单的菜单和菜单项目节点,玩家用这些菜单来暂停游戏或者回去主菜单。

在图3-1中你会注意到PlayerSprite节点中有个子节点PlayerWeaponSprite。换句说,PlayerWeaponSprite是附加在PlayerSprite上的。如果PlayerSprite移动,旋转或放大缩小,PlayerWeaponSprite将会跟着做同样的事情而不需要额外的代码。这就是场景图的强大之处:你对一个节点施加的影响将会影响到它的所有子节点。但是有时候这也会产生混淆,因为像位置和旋转都是相对于父节点来说的。



                                                

CCNode类的层级.所有节点都有一个共同的父类:CCNode。它定义了许多除显示节点外的通用的属性和方法。图3-2展示了继承自CCNode的一些最重要的类。这些类是你最常用到的。其实即使你只用这些类,你也可以创造出很有意思的游戏。

[转载]Cocos2d中几种常用类简介

图3-2.CCNode是cocos2d中最重要的类。所有类都继承自CCNode。CCNode定义了通用的属性和 方法。

CCNodeCCNode是所有节点的基类。它是一个抽象类,没有视觉表现。它定义了所有节点都通用的属性和方法。

使用节点CCNode类实现了所有添加,获取和删除子节点的方法。以下是一些处理子节点的方法:

  1. 生成一个新的节点:

       CCNode* childNode = [CCNode node];
  2. 将新节点添加为子节点:
    [myNode addChild:childNode z:0 tag:123];

  3. 获取子节点:
    CCNode* retrievedNode = [myNode getChildByTag:123];

  4. 通过tag删除子节点;cleanup会停止任何运行中的动作:[myNode removeChildByTag:123 cleanup:YES];

  5. 通过节点指针删除节点:
    [myNode removeChild:retrievedNode];

                
  1. 删除一个节点的所有子节点:
    [myNode removeAllChildrenWithCleanup:YES];

  2. 从myNode的父节点删除myNode:
    [myNode removeFromParentAndCleanup:YES];

addChild中的z参数决定了节点的绘制顺序。拥有最小z值的节点会首先被绘制;拥有最大z值的节点最后一个被绘制。如果多个节点拥有相同的z值,他们的绘制顺序将由他们的添加顺序来决定。当然,这个规则只适用于像sprites那样有 视觉表现的节点。

tag参数允许你通过getChildByTag方法来获取指定的节点。


注:如果有多个节点拥有相同的tag数值,getChildByTag将把找到的第一个节

点返回。其它节点将不能够再被访问。所以你要确保为你的节点指定独有的tag

数值。

动作(Actions)也有tag。不过,节点和动作的tag不会冲突,所以拥有相同

tag数值的动作和节点可以和平共处。

使用动作(Actions)节点可以运行动作。我会在以后多讲一些动作相关的知识。现在你只要知道动作可以让节点移动,旋转和缩放,还可以让节点做一些其它的事情。

  1. 以下是一个动作的声明:
    CCAction* action = [CCBlink actionWithDuration:10 blinks:20];action.tag = 234;

  2. 运行这个动作会让节点闪烁:[myNode runAction:action];

  3. 如果你想在以后使用此动作,你可以用tag获取:
    CCAction* retrievedAction = [myNode getActionByTag:234];

  4. 你可以用tag停止相关联的动作:[myNode stopActionByTag:234];

  5. 或者你也可以用动作指针停止动作:[myNode stopAction:action];

  6. 你可以停止所有在此节点上运行的动作:[myNode stopAllActions]; 


原创粉丝点击