【发布时间】:2012-11-30 12:27:32
【问题描述】:
有人会考虑以下场景并给我一个建议:我正在使用一个具有一个 CCSpriteBatchNode 的 GameplayLayer 实现一个基本的 cocos2d 游戏。我有一个 GameObject:CCNode,它有 3 个 CCSprite,如下所示:
CCSprite *bodySprite;
CCSprite *hairSprite;
CCSprite *eyesSprite;
初始化GameObject 时,我将精灵添加到GameObject 作为它的子元素,如下所示:
[self addChild:bodySprite];
[self addChild:hairSprite];
[self addChild:eyesSprite];
这样我可以更改节点 (GameObject) 的位置、旋转等,并且所有精灵都会受到更改的影响但是当我添加更多时会出现一个主要的性能问题不止一个GameObjects 以"each sprite draws itself, which means one additional draw call per sprite" 身份出现在现场。
为了解决性能问题,在阅读了this post 之后,我决定在初始化时将GameObject 的精灵添加到GameplayLayer 的CCSpriteBatchNode,如下所示:
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:bodySprite];
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:hairSprite];
[[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:eyesSprite];
只是现在,我必须一一设置GameObject的精灵的位置,而不是
self.position = ...
我必须使用
bodySprite.position = ...
hairSprite.position = ...
eyesSprite.postion =...
这是一个乏味的更改,我失去了将 GameObject 设计为精灵组合的最大好处之一。
问题:有没有办法使用节点的位置来影响组成精灵的位置,我可以将它们作为子级添加到GameObject 和sceneSpriteBatchNode 中吗?如果不是正确的方法,是不是一一设置精灵的位置?
【问题讨论】:
标签: cocos2d-iphone code-organization