Рисование линии непрерывно с помощью кода - PullRequest
2 голосов
/ 31 марта 2012

Я совершенно новичок в разработке для 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 голосов
/ 01 апреля 2012

UIBezierPath проще, но лучшим способом, особенно если вы хотите добавить оверлеи или спрайты, будет cocos2d или аналогичная среда разработки игр ...

...