我正在尝试制作一种使用蛇类的游戏。到目前为止,我得到它的工作,它很好地工作,但经过一段时间它有点迟钝,特别是在Iphone 5及更低。
我知道这是因为笔直:
-(void) drawRect:(CGRect)rect{
NSDate *start = [NSDate date];
CGFloat rr, rg, rb, ra;
[redcolorr getRed:&rr green:&rg blue:&rb alpha:&ra];
CGFloat gr, gg, gb, ga;
[greencolorr getRed:&gr green:&gg blue:&gb alpha:&ga];
CGFloat br, bg, bb, ba;
[bluecolorr getRed:&br green:&bg blue:&bb alpha:&ba];
if ([myName isEqual:@"Server"]) {
for (int i= 0; i<ServerBody.count; i++) {
Snake *a;
a = [ServerBody objectAtIndex:i];
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(ctx);
CGContextSetRGBFillColor(ctx, rr, rg, rb, ra);
CGContextFillEllipseInRect(ctx, CGRectMake(a.x,a.y,7.5*k*sizee, 7.5*k*sizee));
UIGraphicsPopContext();
}
}
else{
for (int i= 0; i<IntelligentServerBody.count; i++) {
Snake *a;
a = [IntelligentServerBody objectAtIndex:i];
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(ctx);
CGContextSetRGBFillColor(ctx, rr, rg, rb, ra);
CGContextFillEllipseInRect(ctx, CGRectMake(a.x, a.y, 7.5*k*sizee, 7.5*k*sizee));
UIGraphicsPopContext();
}
}
if ([myName isEqual:@"Client0"]) {
for (int i= 0; i<Client0Body.count; i++) {
Snake *a;
a = [Client0Body objectAtIndex:i];
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(ctx);
CGContextSetRGBFillColor(ctx, br, bg, bb, ba); // white color
CGContextFillEllipseInRect(ctx, CGRectMake(a.x, a.y, 7.5*k*sizee, 7.5*k*sizee));
UIGraphicsPopContext();
}
}
else{
for (int i= 0; i<IntelligentClient0Body.count; i++) {
Snake *a;
a = [IntelligentClient0Body objectAtIndex:i];
CGContextRef ctx = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(ctx);
CGContextSetRGBFillColor(ctx, br, bg, bb, ba); // white color
CGContextFillEllipseInRect(ctx, CGRectMake(a.x, a.y, 7.5*k*sizee, 7.5*k*sizee));
UIGraphicsPopContext();
}
}
NSTimeInterval timeInterval = [start timeIntervalSinceNow];
}
请记住:
所以现在,请告诉我,如果我没有遗漏代码行,或者有不必要的行。 还有其他方法来画蛇吗?我希望蛇能够“闪耀”(每次抽奖都会改变颜色),也许会“增长/缩小”(改变溺水点的大小。
答案 0 :(得分:0)
我想出了如何使用Paths,它非常有效:
-(void) drawRect:(CGRect)rect{
a = [ServerBody objectAtIndex:0];
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(ctx, 7.5*k*sizee);
CGContextMoveToPoint(ctx, a.x, a.y);
CGContextSetStrokeColorWithColor(ctx, redcolorr.CGColor);
for (int i= 0; i<ServerBody.count; i++) {
a = [ServerBody objectAtIndex:i];
CGContextAddLineToPoint(ctx,a.x, a.y);
}
CGContextStrokePath(ctx);
}
现在的问题是我是否可以增加游戏循环计时器。我正在使用Multipeer Connectivity每隔0.05秒从一个iPhone发送位置到另一个iPhone。但我发送这个:
NSMutableArray *Messagee = [[NSMutableArray alloc] initWithCapacity:10];
[Messagee addObject:x];
[Messagee addObject:y];
[Messagee addObject:ang];
[Messagee addObject:ind];
NSData* Message = [NSKeyedArchiver archivedDataWithRootObject:Messagee];
[self.partyTime sendData:Message
withMode:MCSessionSendDataUnreliable
error:nil];
不幸的是,其他iPhone需要一段时间才能收到它。 我的包太大了吗? 我应该使用Streams更快地发送位置吗? 其他建议?
感谢您的所有答案!