매 0.1 초마다 NSTimer가있는 그리드에서 셀을 그립니다. 크기는 약 96x64 => 6144 셀/이미지입니다. 녹색 직사각형 대신 이미지를 드로잉하는 경우 4 배 느립니다!drawRect의 성능 향상 :
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);
CGContextSetRGBFillColor(context, 0, 0, 0, 1);
CGContextFillRect(context, CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height));
int cellSize = self.bounds.size.width/WIDTH;
double xOffset = 0;
for (int i = 0; i < WIDTH;i++)
{
for (int j = 0; j < HEIGHT;j++)
{
NSNumber *currentCell = [self.state.board objectAtIndex:(i*HEIGHT)+j];
if (currentCell.intValue == 1)
{
[image1 drawAtPoint:CGPointMake(xOffset + (cellSize * i),cellSize * j)];
}
else if (currentCell.intValue == 0){
[image2 drawAtPoint:CGPointMake(xOffset + (cellSize * i),cellSize * j)];
}
}
}
UIGraphicsPopContext();
}
각 사각형에 png 또는 jpg를 그리려면 어떻게하면 더 빨리 만들 수 있을까요? 이미지의 크기가 이미 적절한 크기로 조정되었습니다.
이미지가 실제로 이미지 파일의 크기가 조정되었거나 메모리 크기가 조정 되었습니까? –
그들은 지금 메모리에서만 확장됩니다. 나는 전혀 결과가 없었던 파일들을 스케일링 해 보았습니다 (놀랐습니다)! 64x64 픽셀에서 10x10 픽셀로 변경되었습니다 ... – Shamino
코드를 성능 향상을 위해 여러 가지 방법이 있습니다 (예 : 'CGPointMake'에있는 곱셈을 덧셈으로 변환하여'self.levelState.board'를'NSArray'가 아닌 C 배열로 만듭니다. 그러나 병목 현상은 다시 칠할 영역을 확인하지 않고 0.1 초마다 다시 칠해도 이상하게 보입니다.게임에서만 그런 칠을해야하기 때문에 OpenGL을 사용하는 이유는 무엇입니까? – Sulthan