1

给定一个NSMutableArray动态s,从to 、to等CGPoint画线最快和最有效的方法是什么?我应该用 C 或 C++ 重写我的函数以获得更好的性能吗?目前,当数组中有超过 20 个点时,我的帧率会受到很大影响。我正在使用 cocos2d v2.0.0-rc2,我目前有:array[0]array[1]array[1]array[2]

-(void)draw
{
    for (int i = 0; i < [points count]; i+=2)
    {
        CGPoint startFromArray = [[points objectAtIndex:i] CGPointValue];
        CGPoint endFromArray = [[points objectAtIndex:i+1] CGPointValue];

        ccDrawLine(startFromArray, endFromArray);
    }

    [super draw];
}
4

1 回答 1

2

这里不需要使用迭代。Cocos2d 有一个名为ccDrawPoly(). 你可以像这样使用它:

CGPoint *verts = malloc(sizeof(CGPoint) * [points count]);

for (int i = 0; i < [points count]; i++) {
    verts[i] = [[points objectAtIndex:i] CGPointValue];
}

ccDrawPoly(verts, [points count], NO);

free(verts);

显然,如果将 CGPoints 存储在 C 数组中而不是从 NSValues 中对它们进行装箱和拆箱,您将获得更好的性能,但如果您真的需要可变性,那将无济于事。

至于 的第三个参数ccDrawPoly(),设置为YES将连接数组的起点和终点,形成一个封闭的多边形,而使用NO只会形成一堆开放的线。

于 2012-06-30T18:25:10.867 回答