程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 我的第一個Java手機程序

我的第一個Java手機程序

編輯:J2ME

下午閒著沒事,就看前段時間買的《Java手機游戲實例手冊》,還到書上先容的網站往下載了源代碼。可是下載的源代碼並不完整,例如第六章的源代碼就只有第二節的那個程序,沒有後面幾節的程序;而且也沒有後面講解中用到的圖片。於是只好自己在網上找圖片,並且改寫例子程序。本來我不太瞧得起這本書的,感到它太簡略了,買它只是想在無聊的時候打發下時間的,但是經過自己改寫程序,才發明,要真正動手,才會留心到一些細節標題的;要做多了,才會熟悉。

固然這個程序在高手看來是過於簡略的,但是這個是我學習Java手機游戲編程的第一個自己寫的程序,我也不用怕被人笑話,把這麼簡略的東西放到博客上來,由於學習總是有個過程的嘛。

功效很簡略,僅僅是趙雲騎著馬不停地從屏幕左邊走到右邊。背景是用小圖片拼接起來的,由於我把原圖片處理得不好,所以上邊一點還看得過往,下邊就不對了。

程序由兩個文件組成:MyCartoonMidlet.java和MainCanvas.Java。

這是MyCartoonMidle.Java的內容:

package mycartoon; import Javax.microedition.midlet.MIDlet;import Javax.microedition
{ m_canvas = new MainCanvas(); if (null != m_canvas) { Display.getDisplay(this).setCurrent(m_canvas); while (true) { try { Thread.sleep(100); m_canvas.repaint(); } catch (Exception e) {} } } }}

這是MainCanvas.Java的內容:

package mycartoon; import Java.io.IOException;import Javax.microedition.lcdui.*;
(0);  int x = 0; int y = getHeight() / 2 - 60; m_sprite.setPosition(x, y);  /* 創立背景圖層*/ image = Image.createImage("/bk.jpg"); m_bk = new TiledLayer(4, 8, image, 60, 40); m_bk.setPosition(0, 0); setCells(); } catch (IOException e) { e.printStackTrace(); }  m_manager = new LayerManager(); m_manager.append(m_sprite); m_manager.append(m_bk); }  /* 設置背景圖層的各單元格*/ private void setCells() { int x, y;  m_bk.setCell(0, 0, 2); m_bk.setCell(1, 0, 3); m_bk.setCell(2, 0, 4); m_bk.setCell(3, 0, 5);  for ( y = 1; y < 8; y++) { for (x = 0; x < 4; x++) { m_bk.setCell(x, y, 6); } } }  protected void paint(Graphics g) { int n, x;  n = m_sprite.getFrame(); n = (n + 1) % 6; m_sprite.setFrame(n);  x = m_sprite.getX() + 10; if (x > 240) { x = -160; } m_sprite.setPosition(x, m_sprite.getY());  /* m_bk.paint(g); m_sprite.paint(g); */ m_manager.paint(g, 0, 0); }}
闡明:

這是一個簡略的Java Midlet 程序。Mid代表Mobile Information Device。Midlet這個名字大概跟Java Applet的命名類似。Applet程序都需要一個持續自Applet類的類,其中包含init(),destroy()等方法,Midlet程序也很類似地有一個持續自Midlet的類,其中含有startApp(),pauseApp(),destroyApp()等供系統回調的函數。這個還是比擬輕易懂得的。

第23到26行:創立一個MainCanvas對象,並將它設置為當前顯示對象。

第27到35行:每隔100毫秒進行一次刷新,實現動畫後果。書上用的是while(true),作者實在是程度不咋的啊,難道不知道這樣會不必要地使 CPU占用率很高的嗎。說句題外話,這書是“‘十一五’全國盤算機利用與軟件技巧專業范疇技巧型緊缺人才培養培訓教材”,我看這書的這種等級恰好合適許多盤算機專業剛畢業的學生。假如各種收費很高的IT培訓就是用這個作為教材的話,吾竊認為,不值得花錢往參加培訓,買本書自學好了。

第17到24行:創立精靈對象(騎馬的趙雲)並且設置其地位在畫布中心。

J2ME供給了Sprite類表現游戲中的精靈對象。Sprite類可以利用一幅圖片天生運動的精靈對象。當然,這幅圖像就是把動畫的各幀放在一起了, Sprite類可以較方便地治理各幀。為了准備這幅圖片,我還費了點心思的。

(1) 先從網上找到了一個騎馬的趙雲的gif動畫,第一個標題就是怎麼把各幀提取出來,合並成一張圖片。在網上搜索了一陣子,發明了一個實用的小工具:png超級伴侶pngmate。它可以提取gif動畫的各幀,組合成一張圖片,還可以方便地進行各種設置。惋惜是個把持台程序。我打算有空的時候為它寫一個簡略的界面,把它包裝起來。

(2) 用pngmate把gif動畫轉換成一張圖片後,先把顯示精靈部分的程序寫好,運行起來後才發明,精靈的白色背景沒有往掉,顯示後果不好。在網上搜索了好一陣子,也沒有找到合適的工具。最後才發明,本來我一直用的TotalCmd文件治理器就有這個功效,我是有點捨近求遠了。

第27到30行:創立背景圖層。m_bk = new TiledLayer(4,8,image,60,40);這句中前兩個參數是圖層的列數和行數,後兩個參數是cell的寬度和高度,開端的時候我寫好了程序,運行的後果卻始終跟我想想的不一樣。後來看了Java無線工具包文檔才發明是參數的次序寫錯了。42行的setCells()函數設置各個cell 顯示的tiled的編號。Java WTK供給的這個TiledLayer還真是比擬好用,實用的。

第37到39行:創立圖層治理器,將精靈對象和背景圖層加進到圖層治理器中。留心添加的次序,是從前往後依次添加的。假如說Z方向是沿屏幕向外的(向著人盯著屏幕看的眼睛,與視線方向相反),也就是沿Z軸負方向的次序依次添加。(這會兒發覺“視線”這個詞似乎跟“心理學”一樣,固然不准確,但是已經商定俗成了^_^)。

第69到73行:注釋掉的部分是不應用圖層治理器時候的繪制代碼。這個繪制次序跟把對象(圖層)添加到圖層治理器的次序相反。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved