我正在使用绘图功能突出显示插入到高分表中的分数,但是当我尝试离开高分层时,我发现应用程序滞后了。我还比较陌生,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 ];
}
您正在每帧创建一个新的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节点。实际上,如果您像执行代码那样运行代码,则在下一个帧之前将不会绘制draw节点,因此它将始终落后1帧。使用计划的更新方法来更新绘图节点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句