you can add any class inherited from of CCNode as a child of another CCNode instance.
player is a inherited from CCNode and CCLayer is also inherited from CCNode, so there is no need for a CCSpriteBatchNode instance in there, you can directly add player instance to your layer!
-(void) update:(ccTime)deltaTime
{
CCArray *listOfGameObjects = [sceneSpriteBatchNode children];
for (CCNode *tempChar in listOfGameObjects) {
[tempChar updateStateWithDeltaTime:deltaTime andListOfGameObjects:listOfGameObjects];
}
[self addChild:player];
}
CCSpriteBatchNode provides better performance only to render multiple sprites with same texture, so if player does not use same texture as other objects in the scene you can't use an sprite batch! but you can define player class to inherit CCSprite instead of CCNode. this way you can attach it to the existing sceneSpriteBatchNode object.