在cocos2d引擎中,有一种方法可以将对象添加为另一个对象的子对象。
例如,在Game.m文件中的这行代码中:
CCMenu *menu = [CCMenu menuWithItems:pauseButton, nil];
pauseButton.position = ccp(s.width/2 - pauseButton.contentSize.width/2, (-s.height/2)
+ pauseButton.contentSize.height/2);
[self addChild:menu z:100];
您可以看到CCMenu的菜单实例作为子项添加到Game的类对象中。这实际上是做什么的?是为了记忆目的吗?
答案 0 :(得分:1)
这种层次结构系统有助于组织和引用您的游戏组件。并展示它们。
Game.m
是您的场景,它将显示您的游戏元素。但是,它不知道这些元素是什么。因此场景中有一个子列表,它将“显示”它们(精灵,按钮,标签等......)。因此,您可以将一个子项添加到场景中,以告诉场景需要显示此子项,因为它是一个可视元素。
答案 1 :(得分:1)
Cocoa和Qt也使用这种层次结构,您可以将一个视图作为子视图添加到另一个视图中。它与内存使用无关,它的主要目的是明确责任顺序(在Cocoa中:响应者链)。
在用户界面中,最下面的视图第一次有机会对用户输入作出反应。如果视图对用户输入没有反应,它会将责任传递给其父级。然而,在Cocos2D中没有使用它,它主要成为一个系统,用于相对于彼此定位节点以及将节点组合在一起,以便它们全部绘制在相同的“深度层”上。
像这样的树状层次结构的缺点是你不能轻易地迭代场景中的所有节点而不会递归到每个子树中。