亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

經典收藏:J2ME Game的開發筆記

2019-11-17 06:23:59
字體:
來源:轉載
供稿:網友

  J2ME Game開發筆記-嘗試IO優化
  正在開發的一個游戲,由于讀地圖的時候做了圖片切割,所以速度比較慢。(在我開發上一個游戲的時候,讀取地圖時沒有裝載切割圖片,速度非???,看來IO操作的速度和createImage,drawImage相比是微不足道的)對于IO的優化也許根本不會明顯的提高速度,但我還是試了一下。
  
  分析了一下代碼,在最初的代碼中為了比較方便的讀取各種類型的數據,使用DataInputStream套接InputStream??墒俏易屑毧戳艘幌挛易x取得數據,居然都是byte,唯一的一個char也是被我用兩個byte手工組裝起來的。這下,DataInputStream看來是不需要了。于是我做了個實驗,沒改動之前讀取地圖耗時1242ms,將DataInputStream去掉直接使用InputStream耗時1065ms,雖然每次試驗的結果都稍有不同,但大概還是節約了200ms左右。
  
  還能再加快點嗎?再觀察一下代碼,我發現數據是通過多次的read操作讀取進來的。太過頻繁的io操作會不會降低速度呢?假如用一個字節數組作緩沖一次性將數據都讀進來會不會快點?嗯,試一試才知道。但是我怎么知道一個流的大小呢?InputStream的avaliable方法總是返回-1??!打開兩次流,第一次先計算大???對了,還有一個方法。直接將文件大小寫到文件前面。地圖文件是用自己的編輯器生成的,知道大小很輕易。于是我在文件前面用兩個byte紀錄了文件的大小,先從流中讀取2個byte,得到文件大小后,再用read(byte[],int,int)方法將整個流讀取到緩沖中。然后,我的所有數據操作都從緩沖中讀取。好,試驗一下,結果是:1154ms。阿? 慢了近100ms。事實證實了這個猜想是錯誤的。原因?也許只有了解KVM的機制才知道。
  
  弄完速度的問題,我又覺得讀取文件的try塊太大了,因為是邊讀邊處理數據,所以try塊變得很大。try塊太大會增加class文件的大小。于是我用一個方法將讀取byte的操作封裝起來,當然這個方法是聲明為PRivate static的,但究竟能不能內聯,只有編譯器和kvm才知道。在這個方法內部從流中讀取一個字節的時候采用了try,catch結構,這就使一個大try塊分散成若干小try塊。試驗了一下,耗時1089ms,誒,還是慢了點。現在對于速度的要求比空間更高,更何況減小try塊節省的10幾個字節打包后基本忽略不計了。所以這個優化又失敗了。
  
  小結:能使用簡單流的時候就不要使用復雜流,不要太相信理論上的說法,只有試了才知道。
  
  注:試驗數據是Nokia3100手機的實機測試數據,在Nokia 3300上這個數據更小些,最快約800多ms
  
  壓縮還是不壓縮
  做J2ME的都知道Midlet Suite的容量實在太小了,于是不免想做點壓縮。前些天,我就嘗試了一次壓縮。我自己定義的地圖文件里有3層數據,其中2,3層有大片連續分布的相同的值。 唉?我一琢磨,使用一個簡單的行長編碼壓縮,僅對這個值進行行長編碼,算法很簡單速度又不慢,卻可以大大減小地圖文件的大小??雌饋碚娴暮懿诲e誒!說干就干,忙了半天,又改地圖編輯器,又改游戲中讀地圖的代碼??偹愀愣?,試了一下,原來2.23k的一個文件被壓縮到900多字節。似乎很不錯啊,接著我打了個jar包,卻忽然發現這個jar文件似乎并沒有比原來小阿!似乎還大了點。我連忙找出備份的代碼,果然原來的jar更小點!怎么回事????我忽然想到,jar本身就是壓縮格式的。難道。。。我趕緊用WinRAR打開兩次的jar文件觀察。~~~~~原來如此!原來的jar中,2.23k的文件的包大小為185字節,而我現在的jar中,900多字節的文件的包大小為216字節。也就是說,我自己先壓縮一遍的文件打包后還不如不壓縮的??!
  
  看來自己做壓縮之前,一定要先看看你想壓縮的文件在包里面的大小。還有對于png文件,使用某些工具優化后,在包里面的大小卻變大了。這個還真是要注重阿~!
  
  移植一法
  近日觀察某些游戲的源代碼(反編譯后的),發現有個方法挺方便游戲的移植的。定義一個接口(比如stringTable)將游戲中所用到的靜態字符串都定義為接口的常量。然后,讓使用到這些字符串的類實現stringTable接口。這樣移植的時候只要修改接口里面的字符串就行了。當然,對于游戲中坐標的定位,最好使用getWidth(),getHeight()還有Font類的方法stringWidth,不要定死了。這樣的話,移植工作就比較輕松了。
  
  鍵盤響應
  不同的機型對于鍵盤事件的響應不一樣。經過我的測試,Nokia 7210,3100一次只能接受一個按鍵信息。(我寫了個測試程序,發現假如一個鍵被按下后沒有松開,則KeyPressed事件不會再產生,即其他鍵的按下操作無效)所以,用緩沖處理控制精靈運動時,假如規定只能四方向運動。假如up已按下,再按下left,精靈的運動方向并不會改變。不過將按鍵緩沖。按下up,按下left不釋放,松開up---精靈就會向左運動。(在松開up后產生了left的KeyPressed事件!希奇嗎?松開up后我并沒有進行"按下"left這個動作--left鍵在up松開前就被按下了且沒有松開。似乎機器一直在監測鍵盤上各鍵的狀態,并且有一個等待隊列。)
  
  在wtk的標準模擬器上就不同了。它可以接受多個按鍵“同時”按下的事件。所以假如用四個并列的if處理,精靈是可以斜著運動的。假如用if else處理,則假如已經按下一個方向鍵,然后再按下另一個,是否能改變方向受到if else 語句中順序的影響。即,假如是 if(up) else if(left),則會先檢查up鍵,所以假如已經按下了left,再按up是可以向上運動的,反過來就不行了。(這個自然:)
  
  其它的機型由于手頭沒有機器,我也沒試過。應該也是如此吧。
  
  多機型移植經驗談
  開發的時候平臺是Nokia 40,然后移植到Nokia 60, Moto V, SE等,總結一下大概需要幾個版本。
  1 Nokia 40版, 使用Midp1.0+Nokia UI API
  2 Nokia 60版, 使用Midp1.0+NOkia UI API
  3 Nokia Midp2.0版,如6600,7610,使用Midp2.0
  4 Moto V版,使用Midp2.0
  5 SE版,使用Midp2.0
  6 三星s100,s200,c100,使用Midp2.0
  
  幾點開發經驗:
  1 各機型之間最大的差別就是屏幕大小不同。所以游戲中要能自適應屏幕大小
  2 不使用Midp2.0的GameAPI會比較方便移植,只要自己封裝切圖,旋轉等函數即可。NokiaUI API和Midp2。0都支持圖片選轉。2.0支持的更好。注重Nokia 60不支持創建可變的透明圖片,所以要用其他方法代替。
  3 NOkia 6600,7610的UI API有問題(圖片旋轉),所以用了Midp2.0代替
  4 支持MIDP2。0的機器程序大致相同,其中MOto,SE,SX都差不多。但也有細微差別。如SE不支持全屏。所以screenSizeChanged方法無效。
  5 說說聲音播放。NOkia s40上我果斷不用聲音,一是容量限制,二是太難聽。其他機型都可以支持midi和wav.不過沒有發現可以同時播放2個midi的機型,moto v和se都可以同時播放midi和wav,nokia則不行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品福利樱桃av导航| 久久久精品欧美| 国产狼人综合免费视频| 欧美在线性视频| 91视频国产精品| 一区二区日韩精品| 韩国视频理论视频久久| 亚洲男人天堂2024| 欧美性极品xxxx做受| 成人羞羞国产免费| 日韩欧美aⅴ综合网站发布| 久久久电影免费观看完整版| 亚洲福利视频网站| 2019国产精品自在线拍国产不卡| 欧美成人午夜激情在线| 国产精品久久久久国产a级| 91精品国产网站| 亚洲色图国产精品| 亚洲免费av电影| 午夜精品久久久久久久男人的天堂| 亚洲福利视频专区| 欧美贵妇videos办公室| 亚洲小视频在线| 精品欧美国产一区二区三区| 亚洲人成电影在线观看天堂色| 日韩欧美在线免费| 欧美久久精品午夜青青大伊人| 欧美在线视频网站| 高清一区二区三区日本久| 91国内揄拍国内精品对白| 77777少妇光屁股久久一区| 亚洲天堂一区二区三区| 欧美成人精品不卡视频在线观看| 欧美性生交大片免网| 午夜精品一区二区三区在线| 亚洲精品中文字幕av| 国产91对白在线播放| 91久久精品一区| 在线电影中文日韩| 日韩国产精品亚洲а∨天堂免| 91手机视频在线观看| 少妇高潮久久久久久潘金莲| 久久久久久久久久久网站| 91大神福利视频在线| 国产一区二区黑人欧美xxxx| 精品美女国产在线| 亚洲男人天堂网站| 中文字幕久精品免费视频| 亚洲天堂免费在线| 黄色成人av在线| 久久久亚洲福利精品午夜| 中文字幕亚洲综合久久| 国产区精品视频| 亚洲福利精品在线| 亚洲a级在线观看| 亚洲成人激情在线观看| 欧美精品激情blacked18| 97热在线精品视频在线观看| 欧美俄罗斯性视频| 国产欧美精品xxxx另类| 亚洲最大av网| 国产精品爱久久久久久久| 国产亚洲精品美女久久久| 国产精品一二三在线| 欧美激情精品久久久久久久变态| 91热福利电影| 91久久精品国产| 国产精品1234| 欧美日本亚洲视频| 在线观看国产成人av片| 欧美成人激情在线| 欧美色videos| 国产精品成人一区二区| 26uuu日韩精品一区二区| 欧美日韩另类字幕中文| 亚洲欧美在线免费| 成人久久一区二区三区| 日本不卡视频在线播放| 欧美乱妇高清无乱码| 国产亚洲精品一区二555| 日韩精品在线观看网站| 2019日本中文字幕| 国产精品午夜视频| 欧美日韩免费在线观看| 韩曰欧美视频免费观看| 91精品在线播放| 97香蕉久久超级碰碰高清版| 欧美激情中文字幕在线| 欧美日韩亚洲精品一区二区三区| 久久久www成人免费精品| 亚洲精品第一国产综合精品| 中文字幕精品视频| 欧美日韩国产精品一区二区三区四区| 久久电影一区二区| 欧美—级a级欧美特级ar全黄| 狠狠色狠狠色综合日日五| 欧美日韩性视频在线| 91在线看www| 岛国精品视频在线播放| 91视频国产一区| 亚洲精品美女在线| 久久人人爽人人爽人人片av高请| 亚洲黄色av网站| 国产精品视频区| 亚洲精品动漫久久久久| 欧美精品一本久久男人的天堂| 国产精品日韩在线一区| 日本一本a高清免费不卡| 亚洲欧洲一区二区三区在线观看| 成人羞羞国产免费| 国产精品自产拍在线观| 日韩极品精品视频免费观看| 日本精品中文字幕| 欧美大尺度电影在线观看| 国产成人av在线| 亚洲石原莉奈一区二区在线观看| 日韩电视剧在线观看免费网站| 日韩麻豆第一页| 夜夜嗨av色一区二区不卡| 亚洲欧美日韩精品| 成人午夜在线影院| 国产精品h在线观看| 国产精品美女视频网站| 久久久久亚洲精品| 国产精品久久激情| 国产精品999999| 日韩av免费观影| 久久精品国产清自在天天线| 国产精品影片在线观看| 久久九九全国免费精品观看| 成人福利视频网| 操日韩av在线电影| 久久精品电影网| 91精品国产沙发| 中文欧美在线视频| 欧美成人精品一区二区三区| 久热在线中文字幕色999舞| 欧洲成人免费aa| 亚洲欧美日本精品| 欧美大肥婆大肥bbbbb| 亚洲精品美女在线观看播放| 亚洲精品在线看| 日韩av大片在线| 亚洲成人三级在线| 欧美性猛交xxxx偷拍洗澡| 成人性生交xxxxx网站| 亚洲精品成人久久| 日韩免费av一区二区| 国产美女精品视频免费观看| 亚洲图片欧美午夜| 日韩精品久久久久| 国产亚洲在线播放| 一区二区中文字幕| 日韩极品精品视频免费观看| 日韩精品视频在线观看免费| 欧美裸体男粗大视频在线观看| 97精品欧美一区二区三区| 日韩av在线网站| 日韩精品视频在线| 亚洲精品在线不卡| 日韩国产激情在线| 日韩欧美中文在线| 亚洲欧美另类在线观看| 国产精品久久久久久久美男|