Iphone 处理多个CCSprite的最有效方法?
我的环境(box2d)中有四种不同类型的对象,每种类型的对象本身都有多个实例,我希望找到处理添加和操作所有CCSprite的最有效方法。精灵都来自不同的文件,因此最好创建每个精灵并将其添加到数据结构(NSMutableArray)中,还是使用CCSpriteBatchNode,即使每个CCSprite文件不同(对于每种类型的对象)?谢谢Iphone 处理多个CCSprite的最有效方法?,iphone,objective-c,cocos2d-iphone,box2d-iphone,Iphone,Objective C,Cocos2d Iphone,Box2d Iphone,我的环境(box2d)中有四种不同类型的对象,每种类型的对象本身都有多个实例,我希望找到处理添加和操作所有CCSprite的最有效方法。精灵都来自不同的文件,因此最好创建每个精灵并将其添加到数据结构(NSMutableArray)中,还是使用CCSpriteBatchNode,即使每个CCSprite文件不同(对于每种类型的对象)?谢谢 如果您使用不同的纹理,那么CCSpriteBatchNode不太可能是您的答案。从Cocos2D文档中: CCSpriteBatchNode就像一个批处理 节点
如果您使用不同的纹理,那么CCSpriteBatchNode不太可能是您的答案。从Cocos2D文档中: CCSpriteBatchNode就像一个批处理 节点:如果它包含子节点,它将 在一次OpenGL调用中绘制它们 (通常称为“批量绘制”)。A. CCSpriteBatchNode可以引用一个 并且只有一个纹理(一个图像文件, 一个纹理图谱) 那就完了。从表面上看,您应该将这些CCSprite对象添加到CCLayer(或其他CCNode对象),对吗 无需创建单独的数组来管理子对象——Cocos2D为您提供了任何节点的
children
属性。如果您[myLayer addChild:newSprite]
,您将在children
中找到它的引用
这有用吗?如果您对您的用例有更多的了解,我可以扩展我的答案。感谢@phooze的回复,很高兴知道我可以通过children参考访问任何对象。我添加了一些代码来澄清我的问题。我当时的想法是,每个对象都有一个单独的CCSpriteBatchNode,该对象将有多个Sprite,因为这将降低OpenGL调用。实际上,理想情况下,所有子对象都有一个BatchNode,共享相同的纹理图集/图像文件(根据@phooze共享的文档),谢谢@Mr.Gando,我现在开始对CCSpriteBatchNode有了更好的理解。@nardsurfer,祝你好运-Cocos2D非常强大,但与任何框架一样,都有一个学习曲线。。。我自己还有很多东西要学,因为我自己的项目,我恰好是一名SpriteBatchNode专家;)
@interface LevelScene : CCLayer
{
b2World* world;
GLESDebugDraw *m_debugDraw;
CCSpriteBatchNode *ballBatch;
CCSpriteBatchNode *blockBatch;
CCSpriteBatchNode *springBatch;
CCSprite *goal;
}
+(id) scene;
// adds a new sprite at a given coordinate
-(void) addNewBallWithCoords:(CGPoint)p;
// loads the objects (blocks, springs, and the goal), returns the Level Object
-(Level) loadLevel:(int)level;
@end