歡迎您光臨本站 註冊首頁

用J2ME在移動設備上實現動畫

←手機掃碼閱讀     火星人 @ 2014-03-10 , reply:0
 使用MIDP(Mobile Information Device Profile)的開發人員經常會抱怨用些什麼辦法才可以在一個MIDlet上顯示動畫.MIDP 1.0 沒有直接提供對動畫的支持(正在開發中的MIDP 2.0支持),但真要是自己去實現,其實也並非是一件很難的事.

 任何動畫的最基本的前提,是要在足夠快的時間內顯示和更換一張張的圖片,讓人的眼睛看到動的畫面效果.圖片必須按照順序畫出來.從一張圖片到下一張圖片之間的變化越小,效果會越好.

 要做的,是使用你的圖片處理軟體(比如ps或者firework)創建一系列相同大小的圖片來組成動畫.每張圖片代表動畫一幀.

 你需要製作一定數量的禎--越多的幀會讓你的動畫看上去越平滑.製作好的圖片一定要保存成PNG(Portable Network Graphics) 格式,MIDP唯一支持的圖片格式;(有兩個辦法讓你剛做好的圖片在MIDlet上變成動畫.第一,把圖片都放到一個web伺服器上,讓MIDlet下載他們,MIDP內置的HTTP支持.第二個辦法更簡單,把圖片用MIDlet打包成jar文件.如果你使用的是J2ME開發工具,把PNG文件放在你的項目文件裡面就可以了.

 動畫的過程其實更像帳本記錄:顯示當前幀,然後適當地更換到下一幀.那麼使用一個類來完成這個工作應該是很恰當的,那好,我們就先定義一個AnimatedImage類:

 你實例化一個AnimatedImage對象的時候你必須給AnimatedImage類的構造方法傳一個Image對象數組,該數組代表動畫的每一幀.使用的所有圖片必須具有相同的高度和寬度.用Image.createImage()方法從jar文件裡面載入圖片:


 你也可以傳遞一個Canvas對象(可選),和一個剪輯列表(clip list).如果你指定了一個canvas和使用一個timer來自動更換到動畫的下一幀,就如下面的例子代碼中一樣,canvas在動畫向前滾動以後自動被重畫(repaint).不過這樣的實現辦法是可選的,你可以這樣做,也可以讓程序選擇合適的時候重畫canvas.

 MIDP 1.0不支持透明的圖片,AnimatedImage 類使用一個剪輯列表來模擬透明的效果,剪輯列表是圖片被剪成的方塊區域的系列.圖片被畫出來的時候分開幾次,每次畫一個剪輯列表裡面的剪輯區域.剪輯列表在幀的基礎上被定義好,你需要為圖片的每一幀創建一個數組.數組的大小應該是4的倍數,每一個剪輯面積保持了四個數值:左坐標,頂坐標,寬度以及高度.坐標的原點是整個圖片的左上角.需要注意的是使用了剪輯列表會使動畫慢下來.如果圖片更加複雜的話,你應該使用矢量圖片.

 AnimatedImage類擴展了java.util.TimerTask,允許你設定一個timer.這裡有個例子說明如何使用timer做動畫:




 每隔大約200毫秒,timer調用AnimatedImage.run()方法一次,這個方法是的動畫翻滾到下一個幀.現在我們需要的是讓MIDlet 來試試顯示動畫!我們定義一個簡單的Canvas類的子類,好讓我們把動畫「粘貼上去」.



 AnimatedCanvas 類的代碼相當簡單,由一個動畫導入方法和一個paint方法.canvas畫布每次被畫,背景都會被擦除然後循環每個導入的AnimatedImage對象,直接畫到自己身上來(自己擴展了canvas類).


 七幀圖片的動畫,你可以看到一個拍著翅膀的小鳥.MIDlet顯示了5隻小鳥,小鳥的位置和刷新速度是隨機的.你可以用一些其他的辦法來改進這個程序,但這個程序也應該足夠能讓你上手了.


[火星人 ] 用J2ME在移動設備上實現動畫已經有688次圍觀

http://coctec.com/docs/java/show-post-61883.html