Cocos2d iphone 具有合成和CCSpriteBatchNode的游戏对象(续) 有人会考虑下面的场景,并给我一个建议:我正在执行一个基本的CCOS2D游戏,它有一个游戏层,它有一个CcSpResteButCn节点。我有一个游戏对象:CCNode,它有3个CCSprite,如下所示: CCSprite *bodySprite; CCSprite *hairSprite; CCSprite *eyesSprite;

Cocos2d iphone 具有合成和CCSpriteBatchNode的游戏对象(续) 有人会考虑下面的场景,并给我一个建议:我正在执行一个基本的CCOS2D游戏,它有一个游戏层,它有一个CcSpResteButCn节点。我有一个游戏对象:CCNode,它有3个CCSprite,如下所示: CCSprite *bodySprite; CCSprite *hairSprite; CCSprite *eyesSprite;,cocos2d-iphone,code-organization,Cocos2d Iphone,Code Organization,初始化GameObject时,我将精灵添加到GameObject中,就像它的子对象一样: [self addChild:bodySprite]; [self addChild:hairSprite]; [self addChild:eyesSprite]; 通过这种方式,我可以更改节点(GameObject)的位置、旋转等,并且所有精灵都会受到更改的影响,但是当我将多个GameObject添加到场景中时,会出现一个主要的性能问题 为了解决性能问题,在阅读之后,我决定在初始化时将GameObje

初始化
GameObject
时,我将精灵添加到
GameObject
中,就像它的子对象一样:

[self addChild:bodySprite];
[self addChild:hairSprite];
[self addChild:eyesSprite];
通过这种方式,我可以更改节点(
GameObject
)的位置、旋转等,并且所有精灵都会受到更改的影响,但是当我将多个
GameObject
添加到场景中时,会出现一个主要的性能问题

为了解决性能问题,在阅读之后,我决定在初始化时将
GameObject
的精灵添加到
GameplayLayer
CCSpriteBatchNode
,如下所示:

 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:bodySprite];
 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:hairSprite];
 [[GameplayLayer sharedGameplayLayer].sceneSpriteBatchNode addChild:eyesSprite];
只是现在,我必须一个接一个地设置
游戏对象的精灵的位置,而不是

self.position = ...
我必须使用

bodySprite.position = ...
hairSprite.position = ...
eyesSprite.postion =...
这是一个乏味的改变,我失去了将我的
游戏对象设计成精灵组合的最大好处之一

问题:有没有一种方法可以使用节点的位置来影响合成精灵的位置,我可以将它们作为子对象添加到
GameObject
sceneSpriteBatchNode
?如果不是,正确的方法是什么,它是不是一个接一个地设置精灵的位置

首先,“主要表现”是相对的。如果这是您唯一的雪碧,您将不会看到雪碧批处理它们的任何效果。如果你同时在屏幕上看到几十个,情况就不同了

不能同时向两个父节点添加节点

你可以做的是创建一个“容器”精灵。创建一个带有纹理(与精灵批处理节点纹理相同)的CCSprite,并创建一个CGRectEmpty作为纹理rect。这使得精灵不会绘制任何东西,您可以将其用作添加到CCSpriteBatchNode的CCNode


然后,您可以将您的精灵添加到不可见的精灵中,并使用容器精灵来影响其子精灵的位置、旋转等,就像您以前所做的那样。

cool:)非常感谢,我会尽快尝试。。。是的,我平均在同一时间有20个游戏对象,这使得我的帧速率下降到40 fps以下:/hi,我尝试了建议的解决方案,它确实奏效了。。。唯一的问题是,我依赖于节点的位置,而将整个纹理作为精灵的纹理(即使不可见)将使我更改依赖于节点位置的逻辑。我现在正在重新设计整件事。