2012-01-22 5 views
0

iPhone에서 게임을 프로그래밍 중이며 애니메이션하려는 사람, 비트 맵에서 걷는 사람의 이미지가 있습니다. 시간이 지남에 따라 비트 맵이 변경됩니다. 비트 맵을 화면/UIView에 효율적으로 추가하려면 어떻게합니까?iOS의 비트 맵/rgb 데이터를 사용하여 이미지 애니메이션을 적용하는 방법

+0

애니메이션 기능 (여러 개의 주소 지정 가능 이미지 포함)을 사용하는 UIImageView를 사용하는 것이 가장 간단하고 올바른 방법입니다. – Till

+0

UIImageView 애니메이션을 사용할 때 유일한 문제는 모든 애니메이션 프레임을 한 번에 메모리에로드해야한다는 것입니다. 내 GLImageView 해결하기 위해 설계된이 문제가. 물론 일반 PNG 또는 JPEG를 스레드를 사용하여 메모리로 스트리밍하고 자신의 타이머 기반 애니메이션 코드를 작성할 수는 있지만 설정이 복잡하기 때문에 구형 장치에서 30FPS를 얻지 못할 수도 있습니다. –

답변

1

CAKeyframeAnimation으로 할 수 있습니다.

방금이 글을 쓴 것으로 테스트하지는 않았지만 올바른 길로 가야합니다. 모든 프레임을 NSArray에로드 한 다음 애니메이션의 '값'을 frames 배열로 설정합니다.

NSArray *walkFrames = [[NSArray arrayWithObjects: 
      [UIImage imageNamed:@"walk.00000.png"], 
      [UIImage imageNamed:@"walk.00001.png"], 
      [UIImage imageNamed:@"walk.00002.png"], 
      [UIImage imageNamed:@"walk.00003.png"], 
      [UIImage imageNamed:@"walk.00004.png"], 
      [UIImage imageNamed:@"walk.00005.png"], 
      [UIImage imageNamed:@"walk.00006.png"], 
      [UIImage imageNamed:@"walk.00007.png"], 
      [UIImage imageNamed:@"walk.00008.png"], 
      [UIImage imageNamed:@"walk.00009.png"], 
      nil] retain]; 

CAKeyframeAnimation *anim = [CAKeyframeAnimation animation]; 

anim.keyPath = @"contents"; 
anim.duration = 2.f; 
anim.values = walkFrames; 
anim.calculationMode = kCAAnimationLinear; 
anim.repeatCount = HUGE_VAL; 

[myView addAnimation:anim forKey:@"myFlipAnimation"]; 
+0

질문에서 의미 한 것은 이미지에 rgbdata를 사용하여 화면에 빠르게 업로드하는 것이 었습니다. – Twinkle

+0

이것은 플립 북 스타일 애니메이션 (어떻게해야하는지 묻습니다)을 애니메이션하는 가장 효율적인 방법입니다. 당연히 PNG 이미지는 RGB 데이터입니다. 더 잘 설명해 주시겠습니까? –

+1

UIImageView의 animationImages 속성을 사용하지 않는 이유는 무엇입니까? –

3

이미지 시퀀스를로드하는 가장 효율적인 방법은 PVR 형식 이미지를 사용하여 OpenGL 텍스처로로드하는 것입니다. PVR 이미지는 원시 32 비트 RGB 데이터를 비롯한 다양한 형식을 지원합니다.

https://github.com/nicklockwood/GLView

체크 아웃 :

나는 당신에게 GLImageView를 제공하고 당신이 그것을 효율적으로 메모리에 스트리밍 순서로 재생됩니다 파일 이름의 목록을 지정할 수 있습니다 도서관에서이 기능을 싸서했습니다 포함 된 예를 살펴보고 필요에 따라 작동하는지 확인하십시오. 설명서에는 올바른 형식으로 이미지를 만드는 방법에 대한 지침이 포함되어 있습니다.

+0

+1, ty! – Till

관련 문제