iPhone에서 UIIMAGE로 다른 이미지를 렌더링 할 때 성능이 저하되는 이유
-
09-09-2019 - |
문제
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 텍스처 (대부분의 게임을 사용해야하는 것)
제휴하지 않습니다 StackOverflow