通过代码连续画线

时间:2012-03-31 19:40:15

标签: ios cocoa-touch cocoa core-graphics

我对iOS开发完全陌生,我脑海中有一个想法,但我不确切知道如何正确实现它。

我需要的是我的程序绘制一条线,可以通过点击按钮由用户控制。它有点像“蛇”游戏。我尝试了核心图形,但我认为这不是正确的方法。我做了以下事情:

- (void)viewDidLoad{
[NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(updateGame:)    userInfo:nil repeats:YES];
}


-(void)updateGame:(id)sender{

    double timeInterval= [self.lastDate timeIntervalSinceNow]*-1;

      for (int n=0; n<playerNum; n++) {

      CGPoint lastPoint=[[locationArray objectAtIndex:n]CGPointValue];

      CGPoint updatedLoc= CGPointMake(lastPoint.x+100*timeInterval*sin([[directionArray objectAtIndex:n]doubleValue]), lastPoint.y+60*timeInterval*cos([[directionArray objectAtIndex:n]doubleValue]));

      [locationArray replaceObjectAtIndex:n withObject:[NSValue valueWithCGPoint:updatedLoc]];

      [self.drawingView drawToBufferFrom:lastPoint to:updatedLoc withColor:[colorArray objectAtIndex:n]];



    }

self.lastDate=[NSDate date];
}

在DrawingView.m

-(void)drawToBufferFrom:(CGPoint)lastLoc to:(CGPoint)currentLoc withColor:(UIColor *)color{


//[color setStroke];
CGContextSetStrokeColorWithColor(offScreenBuffer, color.CGColor);
//CGContextSetRGBStrokeColor(offScreenBuffer, 1, 0, 1, 1);
CGContextBeginPath(offScreenBuffer);
CGContextSetLineWidth(offScreenBuffer, 10);
CGContextSetLineCap(offScreenBuffer, kCGLineCapRound);

CGContextMoveToPoint(offScreenBuffer, lastLoc.x, lastLoc.y);
CGContextAddLineToPoint(offScreenBuffer, currentLoc.x, currentLoc.y);
CGContextDrawPath(offScreenBuffer, kCGPathStroke);

[self setNeedsDisplay];


}

- (void)drawRect:(CGRect)rect
{
CGImageRef cgImage= CGBitmapContextCreateImage(offScreenBuffer);
UIImage* screenImage= [[UIImage alloc]initWithCGImage:cgImage];
CGImageRelease(cgImage);
[screenImage drawInRect:self.bounds];
}

用户点击屏幕两侧的方向会发生变化。 然而,我面临的是:设备本身的重大滞后因此我认为需要有一种更简单的方法来绘制这些线而没有任何滞后。

1 个答案:

答案 0 :(得分:0)

UIBezierPath更容易,但更好的方法,特别是如果你想要包含叠加或精灵将是cocos2d或类似的游戏开发框架......