在NetBeans平臺上開發J2ME遊戲實例講解(第一部分)

NetBeans開發平臺開發J2ME遊戲實例講解

 [email protected] 林剛 2005.07{ 引用需要註明出處作者}

 

最近在網上看到一篇關於華容道的J2ME的開發實例,花了一天時間,在NetBeans上實現了,並且進行了改進和增強,現將經驗共享出來,部分代碼屬原作者所有,在附錄中。

 

 

1. 必須先安裝 NetBeans IDE 4.0 NetBeans Mobility Pack 4.0,然後才能開始進行 J2ME MIDP 開發。有關下載和安裝完整環境的說明,請參見 J2ME MIDP 開發下載頁面http://www.netbeans.org/kb/articles/mobility_zh_CN.html  2. 創建 MIDP 應用程序 創建新的 J2ME MIDP 項目  

2. 創建新的移動應用程序:

(1).選擇文件”>“新建項目”(Ctrl-Shift-N)。在類別下選擇移動。在項目下選擇移動應用程序,然後單擊下一步    

(2). 項目名稱下輸入 HuaRongDao。將項目主目錄更改爲您系統上的任何目錄。從現在起,我們將該目錄稱爲 $PROJECTHOME    

(3). 不要選中創建 HelloMIDlet”複選框。單擊下一步   CLDC1.0 MIDP1.0,  

(4). J2ME Wireless Toolkit 作爲選定的目標平臺。    

(5). 單擊完成IDE 將創建 $PROJECTHOME./HuaRongDao 項目文件夾。該項目文件夾包含所有的源和項目元數據,如項目 Ant 腳本。此時將在項目窗口中打開 HuaRongDao 項目。                 

(6). 現在,我們來添加一個MIDlet, 右鍵單擊項目,選新建MIDlet,名字爲HuaRongDao,不要寫package.點確定生成, 然後在生成後的 代碼里加入CommandListener支持,代碼框架如下:

/*  * HuaRongDaoMidlet.java  *
    
* Created on 2005
71, 下午8:18 
*/

 

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

 

/** 

* 

* @author  lin 

* @version 

*/

 

public class HuaRongDaoMidlet extends MIDlet implements CommandListener{

     public void startApp() {    

     }         

    

     public void pauseApp() {

     }         

    

     public void destroyApp(boolean unconditional) {    

     }

 

    public void commandAction(Command c, Displayable d) {    

    }     


 

3. 開始編碼

(1)加入退出按鈕,這裏,我們用TextBox這種高級UI來做例子:

public class HuaRongDaoMidlet extends MIDlet implements CommandListener{

    private Display display;

    private final static Command CMD_EXIT = new Command("退出", Command.EXIT, 1);

   

    public HuaRongDaoMidlet(){

        display = Display.getDisplay(this);

    }

   

    public void startApp() {

        TextBox t = new TextBox("TextBox的第一個參數","TextBox的第二個參數",256,0);

 

        t.addCommand(CMD_EXIT);

        t.setCommandListener(this);

        display.setCurrent(mainList);

    }

   

......

 

    public void commandAction(Command c, Displayable d) {

        if (c == CMD_EXIT) {

            destroyApp(false);

            notifyDestroyed();

        }

    }

   

}

注意:A.關於j2meapi函數,可以在WTKdocs目錄當中查到。

   B.我們使用的是MIDP1.0的函數,2.0支持遊戲函數,但是大部分原先的手機都不支持。

   C.TextBox是可輸入框,有標題,缺省內容和內容長度等參數。

 

(2)創建一個處理圖片的類Images, 處理圖片的方式在2.0當中有了很大的改進,可以直接從一張圖片中按照座標取一部分,但是1.0

還沒有這個功能,所以我們使用Image數組來實現。

首先,我們先來顯示一個圖片,來熟悉一下有關image的操作。首先,加入一個Image和包含它的ImageItem,因爲Image本身不能顯示,

必須包在ImageItem中,然後創建一個Form,把ImageItem加到Form中,最後在屏幕上顯示這個Form

    public void startApp() {

        Image a;

        ImageItem i;

        Form props = new Form("測試頁");

       

        try

        {

            a = Image.createImage("/Duke.png");

            i = new ImageItem("java吉祥物",a,ImageItem.LAYOUT_DEFAULT,"圖片無法顯示");

            props.append(i);

        }

        catch (IOException e)

        {

            a = null;

        }

 

        props.addCommand(CMD_EXIT);

        props.setCommandListener(this);

        display.setCurrent(props);

    }

編譯運行一下,發現沒有圖片,說明或者是指定的圖片位置不對或者是系統沒有找到,其中,createImage()中的文件路徑是關於項目

根目錄/res/的,沒有錯,因此是系統沒有找到res目錄。 File|"HuaRongDao"property,選擇Libraries and Resources,把res的完

全路徑加進去,再編譯就可以了。

 

好了,測試成功了,現在可以開始編寫Images類,如下:

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

 

/**

 *

 * @author lin

 */

 

public class Images {//保存常量

    //繪圖位置常量

    public static final int UNIT = 20;//方塊的單位長度

    public static final int LEFT = 20;//畫圖的左邊界頂點

    public static final int TOP = 22;//畫圖的上邊界頂點

    //地圖位置常量

    public static final int WIDTH = 4;//地圖的寬度

    public static final int HEIGHT = 5;//地圖的高度

    //地圖標記常量

    public static final byte CAOCAO = (byte) 'a'; //曹操的地圖標記

    public static final byte MACHAO = (byte) 'b';//馬超的地圖標記

    public static final byte HUANGZHONG = (byte) 'c';//黃忠的地圖標記

    public static final byte GUANYU = (byte) 'd';//關羽的地圖標記

    public static final byte ZHANGFEI = (byte) 'e';//張飛的地圖標記

    public static final byte ZHAOYUN = (byte) 'f';//趙雲的地圖標記

    public static final byte ZU = (byte) 'g';//卒的地圖標記

    public static final byte BLANK = (byte) 'h';//空白的地圖標記

    public static final byte CURSOR = (byte) 'i';//光標的地圖標記

    //地圖組合標記常量

    public static final byte DLEFT = (byte) '1'; //組合圖形左邊標記

    public static final byte DUP = (byte) '2'; //組合圖形上邊標記

    public static final byte DLEFTUP = (byte) '3'; //組合圖形左上標記

    //圖片常量

    //public static Image image_base;//基本圖片

    public static Image image_Zhaoyun;//趙雲的圖片

    public static Image image_Caocao;//曹操的圖片

    public static Image image_Huangzhong;//黃忠的圖片

    public static Image image_Machao;//馬超的圖片

    public static Image image_Guanyu;//關羽的圖片

    public static Image image_Zhangfei;//張飛的圖片

    public static Image image_Zu;//卒的圖片

    public static Image image_Blank;//空白的圖片

    public static Image image_Frame;//遊戲框架的圖片

 

    public Images() {//構造函數

    }

 

    public static boolean init() {//初始化遊戲中用到的圖片

        try {

/*          以下的實現都是基於MIDP2.0的,我們在程序中採用的是基於MIDP1.0的實現

            image_base = Image.createImage("/huarongroad/BITBACK.png");

            image_Frame = Image.createImage(image_base, 126, 0, 145, 177,Sprite.TRANS_NONE);

            //Sprite類是用來翻轉圖片的,是MIDP2.0新新增加的支持遊戲的特性

            image_Zhaoyun = Image.createImage(image_base, 0, 0, UNIT, 2 * UNIT,Sprite.TRANS_NONE);

            image_Caocao = Image.createImage(image_base, UNIT, 0, 2 * UNIT,2 * UNIT, Sprite.TRANS_NONE);

            image_Huangzhong = Image.createImage(image_base, 3 * UNIT, 0, UNIT,2 * UNIT,Sprite.TRANS_NONE);

            image_Machao = Image.createImage(image_base, 0, 2 * UNIT, UNIT,2 * UNIT,Sprite.TRANS_NONE);

            image_Guanyu = Image.createImage(image_base, UNIT, 2 * UNIT,2 * UNIT, UNIT,Sprite.TRANS_NONE);

            image_Zhangfei = Image.createImage(image_base, 3 * UNIT, 2 * UNIT,UNIT, 2 * UNIT,Sprite.TRANS_NONE);

            image_Zu = Image.createImage(image_base, 0, 4 * UNIT, UNIT, UNIT,Sprite.TRANS_NONE);

            image_Blank = Image.createImage(image_base, 1 * UNIT, 4 * UNIT,UNIT,UNIT,Sprite.TRANS_NONE);

*/

            image_Frame = Image.createImage("/frame.png");

            image_Zhaoyun = Image.createImage("/zhaoyun.png");

            image_Caocao = Image.createImage("/caocao.png");

            image_Huangzhong = Image.createImage("/huangzhong.png");

            image_Machao = Image.createImage("/machao.png");

            image_Guanyu = Image.createImage("/guanyu.png");

            image_Zhangfei = Image.createImage("/zhangfei.png");

            image_Zu = Image.createImage("/zu.png");

            image_Blank = Image.createImage("/blank.png");

            return true;

        }catch (Exception ex) {

            return false;

        }

    }

}

這裏提一下圖形格式,一般來說,MIDP1.0只支持png格式,而且對有些png還無法讀取,因此在圖片做好了以後一定要測試一下,

測試方法可以是用NetBeans的調試功能,在運行旁邊有一個Debug ...按鈕,就是進入調試,可以在創建圖形的語句處下端點,然後

看能否成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章