Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 处理多个CCSprite的最有效方法?_Iphone_Objective C_Cocos2d Iphone_Box2d Iphone - Fatal编程技术网

Iphone 处理多个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就像一个批处理 节点

我的环境(box2d)中有四种不同类型的对象,每种类型的对象本身都有多个实例,我希望找到处理添加和操作所有CCSprite的最有效方法。精灵都来自不同的文件,因此最好创建每个精灵并将其添加到数据结构(NSMutableArray)中,还是使用CCSpriteBatchNode,即使每个CCSprite文件不同(对于每种类型的对象)?谢谢


如果您使用不同的纹理,那么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