drawRect函数阻碍了性能

时间:2010-09-14 22:02:07

标签: iphone objective-c cocoa-touch drawing

我正在绘制一条使用DrawRect使用CADisplayLink移动的蛇。

问题是当蛇很小时速度很好,但当蛇长度变长时,蛇变得非常慢。

我使用以下变量跟踪蛇:
- 变量以跟踪蛇头
- 变量以跟踪蛇的尾巴
- 变量以跟踪蛇头方向
- 变量以跟踪蛇尾方向
- 具有蛇弯曲的所有点的数组 - 用于跟踪每个弯曲方向的阵列

以下是我用来绘制蛇的代码。


-(void)drawRect:(CGRect)rect{
CGContextBeginPath(context);
CGContextSetLineWidth(context, 10.0);
float glowWidth = 10.0;
float colorValues[] = {0.4,0.4,0.4,1.0};
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGColorRef glowColor = CGColorCreate(colorspace, colorValues);
CGContextSetShadowWithColor(context, CGSizeMake(0.0, 0.0), glowWidth, glowColor);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetStrokeColorWithColor(context,[UIColor blackColor].CGColor);
GContextMoveToPoint(context, snake.tail_x,snake.tail_y);
for (int i = 0; i < [snake.bends count]; i++) {
NSData *bend_dir_value = [snake.bend_direction objectAtIndex:i];
Direction bend_dir = * (Direction *)[bend_dir_value bytes];
NSData *bend_value = [snake.bends objectAtIndex:i];
CGPoint bend_point = * (CGPoint * )[bend_value bytes];
if (bend_dir == kEastIn || bend_dir == kWestIn || bend_dir == kNorthIn || bend_dir == kSouthIn) {
CGContextMoveToPoint(context, bend_point.x, bend_point.y);
}
else {
CGContextAddLineToPoint(context, bend_point.x, bend_point.y);
}
}
CGContextAddLineToPoint(context, snake.head_x, snake.head_y);
}

为什么当蛇的长度/弯曲增加时我的表现如此糟糕?

我应该采用另一种方式画蛇吗?

2 个答案:

答案 0 :(得分:0)

难道你没有关闭你的道路吗?在最后你可能需要:

CGContextClosePath(上下文);

答案 1 :(得分:0)

你有没有想过你的应用程序,以确定它在减速时花费的大部分时间?

它可能位于核心图形,计算方法或其他地方的路径笔划中。如果在获得任何配置文件/性能数据之前开始优化,最终可能会花时间在错误的位置。

相关问题