如何在没有慢性能的情况下绘制许多CCSprite?

时间:2011-09-17 02:47:45

标签: performance cocos2d-iphone ccsprite

我正在制作这样的箭射击游戏。一切都是好的。但我意识到如果我画线跟踪我的箭头,它会很棒。所以我在我的调度程序中放了一些代码,这个代码应该绘制箭头所在的圆圈。但是我必须绘制这么多圈子,所以当我拍摄多箭头时,游戏框架并不好。

还有其他更好的方法吗?我已经使用了CCSpriteBatchNode,plist,CCSpriteFrameCache。我做了我所能做的一切。我需要帮助非常感谢

这是我的代码

...............
    [self schedule:@selector(CollisionDetection:)];
}


- (void)CollisionDetection:(ccTime)dt 
{
    for (CCSprite *arrow in arrows->arrowsArray) 
    {
            CCSprite *track = [CCSprite spriteWithSpriteFrameName:@"WhiteCircle.png"];
            [track setPosition:arrow.position];
            [arrows->rootLayer->arrowsSheet addChild:track];

            id delete = [CCFadeOut actionWithDuration:1.0];
            id deleteAction= [CCSequence actions:delete ,[CCCallFuncN actionWithTarget:self selector:@selector(spriteActionFinished:)], nil];
            [track runAction:deleteAction];
    .......    

3 个答案:

答案 0 :(得分:1)

对象的分配是一个很大的开销。如果您的游戏速度变慢,您应该考虑在游戏开始时创建一个箭头池,并且只在您需要时立即触发它。如果它不再可见,只需将其设置为非活动状态,并在下次需要箭头时重复使用它。

答案 1 :(得分:0)

听起来你的问题不是箭头,而是我想象的圆圈也是Cocos对象。您最好学习如何使用opengl命令而不是对象直接将圆形纹理绘制到屏幕上。这会有很大的帮助。

答案 2 :(得分:0)

当有时间关键动画时,我会从CCCallFunc(N)保持清晰,因为它会使调度程序停顿一段时间。当我读你的代码时,你会在每个预定的时间间隔都有一个CallFunc ......嗯。您是否尝试在没有调度程序的情况下运行此程序,即打包并立即启动所有动画,最后使用单个CallFunc?不要在计划间隔中更改位置,而是使用您将跟踪动画同时运行的CCMoveTo。