iPhone에서 UIIMAGE로 다른 이미지를 렌더링 할 때 성능이 저하되는 이유

StackOverflow https://stackoverflow.com/questions/744327

문제

UIImage를 사용하여 32x32 블록에서 게임 맵을 렌더링하고 있습니다. 코드는 다음과 같습니다

for( int x = 0; x < rwidth; ++x)
{
    for(int y = 0; y < rheight; ++y)
    {
        int bindex = [current_map GetTileIndex:x :y];
        CGPoint p;
        p.x = x * tile_size_x;
        p.y = y * tile_size_x;
        [img_list[bindex] drawAtPoint:p];
    }
}

이것은 약 150 개의 타일을 렌더링하게됩니다. 내 문제는이 코드를 실행할 때 렌더링 시간이 2-3 프레임으로 내려갑니다.

나는 iPhone이 채워 졌다고 생각했지만, bindex를 = 1로 강제하면 (즉, 같은 블록을 150 번 렌더링한다) 전체 프레임 속도를 얻는다.

나는 다른 uiimages에서 렌더링하는 것이 비용이 많이하다고 믿을 수 없습니다.

누군가 내가 뭘 잘못하고 있는지 말해 줄래 ...

오, 나는 cgimagecreatewithimageInect를 사용하여 더 큰 텍스처 페이지에서 만든 내 이미지 목록을 언급하는 것을 잊었습니다.

감사합니다

도움이 되었습니까?

해결책

열린 기기를 깨고 코드를 프로파일 링하십시오. Uiview에 실제로 최적화되지 않은 것처럼 보입니다. uiviews는 레이어 지원이므로 DrawAtpoint : 화면에 나타나기 전에 이미지를 여러 번 그려야합니다.

즉, Uiimage는 실제로 게임을 위해 설계되지 않았습니다. Uikit의 일부가되는 것과 관련하여 많은 오버 헤드가 있습니다. 당신은 실제로 수백 명을 갖는 것이 아닙니다.

대략적인 속도로 (가장 느리게 빠르게) :

  • uiimage (보통 큰 이미지가 몇 개있는 경우 사용)
  • Calayers (훌륭한 애니메이션 컨트롤이 필요하거나 대략 20 ~ 100 타일/이미지가있는 경우)
  • opelgl 텍스처 (대부분의 게임을 사용해야하는 것)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top