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,我尝试了建议的解决方案,它确实奏效了。。。唯一的问题是,我依赖于节点的位置,而将整个纹理作为精灵的纹理(即使不可见)将使我更改依赖于节点位置的逻辑。我现在正在重新设计整件事。