<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 97,  comments - 93,  trackbacks - 0
    這是一篇關于怎樣使用JBuilder開發j2me程序的例子。本人使用JBuilder2005,2005自帶WTK2.1,自己下載2.2版 本,2.2那個默認的模擬器很好用。另外,Jbuilder X下的WTK也是2.0的版本好象。Jbuilder 9的WTK是1.04。

    首先開啟Jbuilder.建立一個Project。





    然后填寫名字和路徑。繼續:


    然后選擇JDK路徑,本身已有WTK2.1,你可以選擇。但是你也可以自己選擇其他的WTK版本。



    點擊jdk后面的路徑按鈕,繼續:


    然后ok,next.工程建立完畢.
    接著點擊file->New:



    然后在對話框左邊選擇Micro,你就能看到右邊出現MIDlet,Displayable.

    接上面的:如圖示




    點擊MIDlet or Displayable,則讓你輸入MIDlet的名字.如圖:



    繼續下一步,讓你輸入一個Displayable的名字,包括類型(form,canvas等),是否自動加載Command

    等等



    然后Jbuilder自動生成所需代碼,以及Jbuilder自加的一些東西.你可以添加或修改之.

    這里我將本站一篇關于介紹Gamecanvas的文章的代碼拿過來,做少量修改,作為本文章的一個演示;
    TestMIDlet.java文件:


    package temps;

    import javax.microedition.midlet.*;
    import javax.microedition.lcdui.*;

    /**
    * Title:
    *
    * Description:
    *
    * Copyright: Copyright (c) 2005
    *
    * Company:
    *
    * @author not attributable
    * @version 1.0
    */

    public class TestMIDlet extends MIDlet
    {
    private Display display;

    public void startApp()
    {
    try
    {
    display = Display.getDisplay(this);
    Displayable1 gameCanvas = new Displayable1();
    gameCanvas.start();
    display.setCurrent(gameCanvas);
    }
    catch (Exception ex)
    {
    System.out.println(ex);
    }
    }

    public Display getDisplay()
    {
    return display;
    }

    public void pauseApp()
    {
    }

    public void destroyApp(boolean unconditional)
    {
    exit();
    }

    public void exit()
    {
    System.gc();
    destroyApp(false);
    notifyDestroyed();
    }
    }


    Displayable1.java內容:

    package temps;

    import javax.microedition.lcdui.*;
    import java.util.Random;
    import javax.microedition.lcdui.game.*;
    /**
    * Title:
    *
    * Description:
    *
    * Copyright: Copyright (c) 2005
    *
    * Company:
    *
    * @author not attributable
    * @version 1.0
    */

    public class Displayable1 extends GameCanvas implements Runnable
    {
    private boolean isPlay; // Game Loop runs when isPlay is true
    private long delay; // To give thread consistency
    private int currentX, currentY; // To hold current position of the 'X'
    private int width; // To hold screen width
    private int height; // To hold screen height
    private Random random=new Random(System.currentTimeMillis());
    private final int[] sequence={0,1,2,1,0,1,2,1,0,1,2,1,1,1,1,1,1};
    private int counter=0;
    private int enemyX,enemyY;
    private int enemyDirect=0;
    private boolean isdown=false;

    private boolean isalive=true;

    // Sprites to be used
    private Sprite playerSprite;
    private Sprite backgroundSprite;
    private Sprite enemySprite;

    // Layer Manager
    private LayerManager layerManager;

    // Constructor and initialization
    public Displayable1() throws Exception
    {
    super(true);
    width = getWidth();
    height = getHeight();

    currentX = width / 2;
    currentY = height / 2;
    enemyX=width/4;
    enemyY=height/4;
    delay = 100;

    Image playerImage=null;
    Image backgroundImage=null;
    Image enemy=null;
    // Load Images to Sprites
    try
    {
    playerImage = Image.createImage("/transparent.png");
    backgroundImage = Image.createImage("/background.png");
    enemy=Image.createImage("/frames.png");
    }
    catch(Exception e)
    {
    System.out.println("get Image error!"+e.getMessage());
    }

    playerSprite = new Sprite(playerImage, 32, 32);
    System.out.println(playerSprite.getRawFrameCount());
    enemySprite=new Sprite(enemy,50,21);
    backgroundSprite = new Sprite(backgroundImage);
    layerManager = new LayerManager();
    layerManager.append(playerSprite);
    layerManager.append(enemySprite);
    layerManager.append(backgroundSprite);

    }

    // Automatically start thread for game loop
    public void start()
    {
    isPlay = true;
    Thread t = new Thread(this);
    t.start();
    }

    public void stop()
    {
    isPlay = false;
    }

    // Main Game Loop
    public void run()
    {
    Graphics g = getGraphics();
    while (isPlay == true)
    {
    input();
    drawScreen(g);
    try
    {
    Thread.sleep(delay);
    }
    catch (InterruptedException ie)
    {

    }
    }
    }

    // Method to Handle User Inputs
    private void input()
    {
    int keyStates = getKeyStates();

    playerSprite.setFrame(0);
    if(isalive)
    {
    if(counter==0)
    {
    enemyDirect=Math.abs(random.nextInt()%4);
    }
    counter++;
    switch(enemyDirect)
    {
    case 0:
    enemyY=Math.max(0,--enemyY);
    break;
    case 1:
    enemyY=Math.min(++enemyY,height-enemySprite.getHeight());
    break;
    case 2:
    enemyX=Math.max(0,--enemyX);
    break;
    case 3:
    enemyX=Math.min(++enemyX,width-enemySprite.getWidth());
    break;
    }
    counter=(counter++)%(sequence.length());
    enemySprite.setFrame(sequence[counter]);
    }
    else
    {
    enemyY+=counter;
    enemyY=Math.min(enemyY,height-enemySprite.getHeight());

    if(enemyY
    counter++;
    enemySprite.setFrame(3);
    }

    // Left
    if ((keyStates & LEFT_PRESSED) != 0)
    {
    currentX = Math.max(0, currentX - 1);
    playerSprite.setFrame(1);
    }

    // Right
    if ((keyStates & RIGHT_PRESSED) != 0)
    if (currentX + 5 < width)
    {
    currentX = Math.min(width, currentX + 1);
    playerSprite.setFrame(3);
    }

    // Up
    if ((keyStates & UP_PRESSED) != 0)
    {
    currentY = Math.max(0, currentY - 1);
    playerSprite.setFrame(2);
    }

    // Down
    if ((keyStates & DOWN_PRESSED) != 0)
    {
    isdown=true;
    }

    if ((keyStates & DOWN_PRESSED) != 0)
    {
    if(isdown)
    {
    if (currentY + 10 < height)
    {
    currentY = Math.min(height, currentY + 1);
    playerSprite.setFrame(4);
    }
    }
    }

    if((keyStates & FIRE_PRESSED)!=0)
    {
    isalive=!isalive;
    counter=0;
    }

    if(!(enemyX+enemySprite.getWidth()currentX+playerSprite.getWidth() || enemyY>currentY+playerSprite.getHeight()) && isalive)
    {
    counter=0;
    isalive=false;
    }
    }

    // Method to Display Graphics
    private void drawScreen(Graphics g)
    {
    g.setColor(0xffffff);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(0x0000ff);

    // updating player sprite position
    playerSprite.setPosition(currentX, currentY);
    enemySprite.setPosition(enemyX,enemyY);

    layerManager.setViewWindow(0, 0, width, height);
    layerManager.paint(g, 0,0);

    g.setColor(0xffffff);
    flushGraphics();
    }

    }


      此程序里敵人隨機向4個方向移動,而玩家控制的角色可任意移動, 如果兩者發生碰撞,則敵人死亡.

      另外按fire鍵可直接讓敵人生或死
    關于運行,Jbuilder里有個運行配置:




    一般不用修改,如果多個Midlet,你可以在這里添加.

    關于用Jbuilder打包.

    一樣file->new:




    這個在2005和9,x里有所不同,選擇Archive,右邊選擇MIDlet,然后ok.




    這里選擇要打包文件的目錄,當前默認是所有的class文件和資源文件,你也可以刪除掉,自己選擇一部分.

    然后next,直到最后. 然后運行,在運行配置中默認重新rebuild,打包等等.然后你能看到左上框里有jar文件和jad文件.




    運行結果:




    呵呵,用你控制的主角去碰撞這只大飛蟲試試:

    posted on 2006-05-09 18:31 wqwqwqwqwq 閱讀(534) 評論(0)  編輯  收藏 所屬分類: Simple Java
    <2006年5月>
    30123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910




    常用鏈接

    留言簿(10)

    隨筆分類(95)

    隨筆檔案(97)

    文章檔案(10)

    相冊

    J2ME技術網站

    java技術相關

    mess

    搜索

    •  

    最新評論

    閱讀排行榜

    校園夢網網絡電話,中國最優秀的網絡電話
    主站蜘蛛池模板: 涩涩色中文综合亚洲| 久久亚洲精品无码aⅴ大香| 亚洲高清毛片一区二区| 男男AV纯肉无码免费播放无码| 亚洲精品无码久久毛片波多野吉衣| 国产精品免费AV片在线观看| 亚洲欧洲美洲无码精品VA| 手机看片国产免费永久| 亚洲精品成人无限看| 久久久久国产精品免费免费不卡| 图图资源网亚洲综合网站| 99久久免费观看| 亚洲youjizz| 好爽好紧好大的免费视频国产| 欧洲亚洲综合一区二区三区| 全亚洲最新黄色特级网站 | 每天更新的免费av片在线观看 | 亚洲热线99精品视频| 国产一区二区三区免费观在线| 亚洲视频免费在线观看| 日本视频一区在线观看免费| 亚洲一卡一卡二新区无人区| 一本久久综合亚洲鲁鲁五月天| 久久免费香蕉视频| 亚洲精品视频久久| 真实乱视频国产免费观看| 亚洲一级片免费看| 久久久久亚洲av无码专区| 女人18毛片a级毛片免费| 久久久久女教师免费一区| 97亚洲熟妇自偷自拍另类图片 | 中文字幕乱码亚洲无线三区 | free哆啪啪免费永久| 亚洲日韩一区精品射精| 亚洲天堂中文字幕在线| 3344免费播放观看视频| 色噜噜的亚洲男人的天堂| 亚洲国产人成在线观看69网站| 久久精品无码一区二区三区免费 | 亚洲人成色77777| 久久国内免费视频|