绘图功能导致应用程序滞后

Posted

技术标签:

【中文标题】绘图功能导致应用程序滞后【英文标题】:draw function causes app to lag 【发布时间】:2013-09-21 03:48:02 【问题描述】:

我正在使用绘图功能来突出显示插入到高分表中的分数,但我发现当我尝试离开高分层时它会使我的应用程序滞后。我对cocos2d 还是比较陌生,所以我想知道是否有更好的方法,这样就不会造成任何延迟。我发现如果我注释掉这个函数就没有任何滞后。这是我的代码:

- (void)draw 
    [super draw];

    if(currentScorePosition < 0 || currentScore==0) return;


    float w = 320.0f;
    float h = 20.0f;
    float x = (320.0f - w) / 2.0f;
    float y = 230.0f - currentScorePosition * h;

    CGPoint vertices[4];


    vertices[0] = ccp(x, y);
    vertices[1] = ccp(x+w, y);
    vertices[2] = ccp(x+w, y+h);
    vertices[3] = ccp(x, y+h);


    CCDrawNode *draw = [[[CCDrawNode alloc] init] autorelease];

    [draw drawPolyWithVerts:vertices count:4 fillColor:ccc4f(0.5, 0.5, 0.8, 0.5) borderWidth:2.0 borderColor:ccc4f(0.0, 0.0, 0.0, 0.0)];

    [self addChild:draw z:0 ];


【问题讨论】:

【参考方案1】:

您正在每帧创建一个新的 CCDrawNode。随着时间的推移,这会降低游戏速度,因为它必须绘制越来越多的绘制节点。

解决方案:先创建一个绘图节点并将其添加为子节点。在 ivar 中保留对它的引用。仅使用这个单一的绘制节点执行绘制。

请注意,CCDrawNode 的绘制方法仍然是相加的。如果您只想绘制这个多边形并随着时间的推移对其进行更新,那么您必须在绘制之前调用 clear:

[theDrawNode clear];
[theDrawNode drawPolyWithVerts:vertices 
                         count:4 
                     fillColor:ccc4f(0.5, 0.5, 0.8, 0.5) 
                   borderWidth:2.0
                   borderColor:ccc4f(0.0, 0.0, 0.0, 0.0)];

另外注意:你可以在draw方法之外使用draw节点。事实上,如果您像以前那样运行代码,绘图节点将在下一帧之前绘制,因此它总是落后一帧。使用定时更新方法更新绘图节点。

【讨论】:

以上是关于绘图功能导致应用程序滞后的主要内容,如果未能解决你的问题,请参考以下文章

ProGuard 导致应用滞后

颤动的重型平台代码导致UI滞后

防止 DOM 滞后

HJCached 图像导致表格视图滞后

Android在音频播放器中刷新Seekbar进度和播放持续时间导致音频播放滞后

查看堆栈或绘图