Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance 如何在不降低性能的情况下绘制多个CCSprite?_Performance_Cocos2d Iphone_Ccsprite - Fatal编程技术网

Performance 如何在不降低性能的情况下绘制多个CCSprite?

Performance 如何在不降低性能的情况下绘制多个CCSprite?,performance,cocos2d-iphone,ccsprite,Performance,Cocos2d Iphone,Ccsprite,我正在做这样一个射箭游戏。一切都很好。但我意识到如果我画一条线来追踪我的箭,那将是非常棒的。所以我把一些代码放在我的游戏调度程序中,用来画出箭头指向的圆圈。但我必须画这么多的圆圈,所以当我射出多支箭时游戏画面不好 还有其他更好的方法吗?我已经使用了CCSpriteBatchNode、plist、CCSpriteFrameCache。我尽了我所能。我需要帮助,非常感谢 这是我的密码 ............... [self schedule:@selector(CollisionDete

我正在做这样一个射箭游戏。一切都很好。但我意识到如果我画一条线来追踪我的箭,那将是非常棒的。所以我把一些代码放在我的游戏调度程序中,用来画出箭头指向的圆圈。但我必须画这么多的圆圈,所以当我射出多支箭时游戏画面不好

还有其他更好的方法吗?我已经使用了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];
    .......    

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

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

当有一个时间关键型动画时,我会避开CCCallFunc(N),因为它会使调度程序暂停相当长的时间。在我阅读代码时,您在每个计划的时间间隔都有一个CallFunc。。。嗯。您是否尝试过在没有调度程序的情况下运行此程序,即打包并立即启动所有动画,最后使用一个CallFunc?使用将与跟踪动画同时运行的CCMoveTo,而不是将位置更改为计划间隔的一部分

真的吗?你认为它会起作用吗?我也这么想。但我想知道,如果我使用OpenGLAPI绘图,这会变得更好。你认为CCSprite和opengl之间有很大的区别吗?开销要小得多。没有为每个圆创建对象,您只是在Y坐标处绘制X纹理。记住,CCSprite最终还是调用opengl来绘制自己。你只是把那个笨重的中间人剪掉了。另外,回顾你的代码,你每一帧都在创建你的圆圈。那太糟糕了。谢谢,但我不能放弃CCSprite不可思议的功能!像一个淡出,但无论如何谢谢。嗯,这是有道理的:)谢谢,我会解决它的。我的荣幸。如果它对你有效,你知道如何接受答案:)祝你的产品好运。