绘制功能会导致app滞后

时间:2013-09-21 03:48:03

标签: iphone xcode cocos2d-iphone

我正在使用绘图功能来突出显示插入高分榜的分数,但我发现当我试图离开高分榜时它会使我的应用程序滞后。我仍然相对较新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 个答案:

答案 0 :(得分:2)

你每帧都在创建一个新的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方法之外的绘制节点。事实上,如果你像你一样运行代码,绘制节点将不会被绘制,直到下一帧,因此它总是滞后1帧。使用预设更新方法更新绘图节点。