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 閱讀(537) 評論(0)  編輯  收藏 所屬分類: Simple Java
          <2006年5月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910




          常用鏈接

          留言簿(10)

          隨筆分類(95)

          隨筆檔案(97)

          文章檔案(10)

          相冊

          J2ME技術網站

          java技術相關

          mess

          搜索

          •  

          最新評論

          閱讀排行榜

          校園夢網網絡電話,中國最優秀的網絡電話
          主站蜘蛛池模板: 稷山县| 洛宁县| 日照市| 嘉兴市| 昌平区| 闽清县| 犍为县| 孝昌县| 孟津县| 南澳县| 沂水县| 彭泽县| 建始县| 潼南县| 来安县| 金门县| 黔南| 二手房| 连平县| 南昌市| 花莲县| 大关县| 柳河县| 龙山县| 五寨县| 泰兴市| 玛纳斯县| 萍乡市| 安福县| 曲麻莱县| 民和| 普陀区| 来安县| 建湖县| 珠海市| 惠安县| 巫山县| 温州市| 清河县| 乐东| 陕西省|