2012-01-22 43 views
0

我正在iPhone上編程一個遊戲,並且我有一個想要動畫的圖像,請在位圖中說一個行走的人。位圖隨時間變化。如何有效地將位圖添加到屏幕/ UIView?如何在iOS中使用位圖/ rgb數據製作動畫

+0

使用具有動畫功能的UIImageView(保存多個可尋址圖像)似乎是最微不足道的,並以這種方式實現了正確的解決方案。 – Till

+0

使用UIImageView動畫的唯一問題是它必須一次加載內存中的所有動畫幀。這是我的GLImageView旨在解決的問題。當然,您可以使用線程將普通的PNG或JPEG傳輸到內存中,並編寫自己的基於計時器的動畫代碼,但設置起來很複雜,而且可能無法獲得30FPS,尤其是在較舊的設備上。 –

回答

1

你可以用CAKeyframeAnimation來做到這一點。

我只是寫了這個,並沒有測試它 - 但應該讓你在正確的道路上。將所有幀加載到NSArray中,然後將動畫的「值」設置爲幀數組。

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數據。

我已經結束了在給你一個GLImageView並允許您指定的文件名,它會有效地流進記憶和順序播放列表庫此功能:

https://github.com/nicklockwood/GLView

退房包含的例子,看看它是否會滿足您的需求。該文檔包含以正確的格式創建圖像的說明等。

+0

+1分享,ty! – Till

相關問題