摘要:學習如何定義游戲邊界,并給小游戲增加了跳躍功能
          原文見:http://www.aygfsteel.com/Andyluo/archive/2005/12/12/23435.html
          posted @ 2005-12-12 20:23 羅明 閱讀(112) | 評論 (0)編輯 收藏
           

           原文見: http://today.java.net/pub/a/today/2005/07/07/j2me3.html?page=3

          定義游戲的角色和特征

          一個只能將圖片左右移動的游戲是沒有意思的。我們現在要對清單1的代碼作一些改動,讓它變得更有趣些。首先我們要定義游戲顯示的邊界,這樣能保證在所有設備上的大小一致,先定義一些常量,如下代碼所示:

          //游戲邊界
          public static final int GAME_WIDTH = 160;
          public static final int GAME_HEIGHT = 160;

          // 游戲屏幕的原點坐標(左上角)
          public final int GAME_ORIGIN_X = (getWidth() - GAME_WIDTH) / 2;
          public final int GAME_ORIGIN_Y = (getHeight() - GAME_HEIGHT) / 2;

          // couple小精靈上下區域的高度
          public final int SECTION_HEIGHT = 64;

          // couple小精靈來回移動的基準位(base)
          public final int BASE = GAME_ORIGIN_Y + GAME_HEIGHT - SECTION_HEIGHT;

          // couple小精靈跳躍的最大高度
          public final int MAX_HEIGHT = 32;


          (注意,我們這里引入了一個游戲特征:couple小精靈很快就可以在屏幕上跳動了)

          在游戲屏幕上定義的這些常量規定了游戲的邊界,如圖2所示。

          j2me3_figure2.gif


                                  圖 2. 用常量定義游戲邊界

          當然,我們現在需要修改代碼來使用這些常量。在清單1的代碼中添加一個buildGameScreen(Graphics g)方法,如下代碼所示:

          private void buildGameScreen(Graphics g)
          {
              
          // 設置畫筆為黑色
              g.setColor(0x000000);
              
              
          // 繪制游戲邊界
              g.drawRect(GAME_ORIGIN_X, GAME_ORIGIN_Y, GAME_WIDTH, GAME_HEIGHT);

              
          // 繪制基準線
              g.drawLine(GAME_ORIGIN_X, BASE, GAME_ORIGIN_X + GAME_WIDTH, BASE);

              
          //標出couple小精靈能跳到的最高位置
              g.drawLine(GAME_ORIGIN_X, BASE - MAX_HEIGHT, GAME_ORIGIN_X + GAME_WIDTH, BASE - MAX_HEIGHT);
          }

          再在updateGameScreen()方法里繪制couple之前添加一個該方法的調用,還要將couple小精靈的開始位置由CENTER_Y改為BASE(在start()方法里設置coupleY = BASE)。

          couple小精靈可以左右移動,我們要限制它走出邊界,更改calculateCoupleX()方法里左右移動的代碼,避免坐標超出邊界。修改后的代碼如下:

          private void calculateCoupleX(int keyState)
          {
              
          // 根據移動方向改變x坐標
              if((keyState & LEFT_PRESSED) != 0)
              
          {
                  coupleX 
          = Math.max(
                      GAME_ORIGIN_X 
          + coupleImg.getWidth() / 2,
                      coupleX 
          - dx);
              }

              
          else if((keyState & RIGHT_PRESSED) != 0)
              
          {
                  coupleX 
          = Math.min(
                      GAME_ORIGIN_X 
          + GAME_WIDTH - coupleImg.getWidth() / 2,
                      coupleX 
          + dx);
              }

          }

          方法使用Math.max()和min()函數使圖片顯示在游戲邊界內。注意我們在計算中還考慮了圖片的大小。

          我們剛才說過要實現couple小精靈在屏幕上跳躍的功能,我們現在增加一個方法使圖片在Y軸上移動,跳躍時移動的具體路徑將不受玩家影響。

          在清單1的代碼中添加三個新的實例變量:up、jumpHeight 和random。如下所示:

          // 表示couple小精靈移動方向的標識
          private boolean up = true;

          // 跳躍高度,跳躍時隨機生成
          private int jumpHeight = MAX_HEIGHT;

          // 隨機數產生器
          public Random random = new Random();

          jumpHeight初始值被設為MAX_HEIGHT。jumpHeight變量會在couple小精靈每次跳躍時動態設為隨機值,新增的calculateCoupleY()方法如下:

          private void calculateCoupleY(int keyState)
          {
              
          // 檢查couple小精靈是否在跳躍
              if(up)
              
          {
                  
          // 檢查小精靈是否跳到了最大高度
                  if((coupleY > (BASE - jumpHeight + coupleImg.getHeight())))
                  
          {
                      
          //沒達到最大高度,繼續上升
                      coupleY -= dy;
                  }

                  
          else if(coupleY == (BASE - jumpHeight + coupleImg.getHeight()))
                  
          {
                      
          // 到了最大高度,開始下降
                      coupleY += dy;

                      
          // 修改方向標識
                      up = false;
                  }

              }

              
          else
              
          {
                  
          // 小精靈正在下降,檢查是否到地面了?
                  if(coupleY < BASE)
                  
          {
                      
          // 還沒有,繼續下降
                      coupleY += dy;
                  }

                  
          else if(coupleY == BASE)
                  
          {
                      
          // 到達地面,算一個新的隨機高度(小于等于最大高度)
                      int hyper = random.nextInt(MAX_HEIGHT + 1);
                      
                      
          // 保證跳躍高度大于圖像高度
                      if(hyper > coupleImg.getHeight())
                      
          {
                          jumpHeight 
          = hyper;
                      }


                      
          // 往上跳
                      coupleY -= dy;

                      
          // 重置方向標識
                      up = true;
                  }

              }

          }


          你可能已經發覺,這個方法不依賴于用戶的按鍵,傳入的keyState信息也沒有用到。傳入這個值是為了與calculateCoupleX()方法保持一致。方法剛開始時通過漸增coupleY變量值使couple小精靈上升,直到達到這次的跳躍高度(剛開始是MAX_HEIGHT)。達到這個高度后,小精靈開始往下降,降到BASE后又隨機生成一個介于MAX_HEIGHT和圖像高度之間的數值,按這個高度開始下一次跳躍。

          游戲的整個效果是一個以隨機高度跳躍的couple小精靈,它可以在用戶的操縱下左右移動。圖3是游戲的一個截屏:

          j2me3_figure3.GIF

                             圖 3. 游戲截屏

          posted @ 2005-12-12 11:39 羅明 閱讀(915) | 評論 (0)編輯 收藏
           
          摘要:圖中有14個著名的開源項目,你都能看出來嗎?(答案附文后)
          原文見:http://www.aygfsteel.com/Andyluo/archive/2005/12/08/23024.html
          posted @ 2005-12-09 04:10 羅明 閱讀(85) | 評論 (0)編輯 收藏
           

          承接第一部分,介紹小游戲的具體實現,實現第一個版本,并介紹GameCanvas類的使用及運行機制。

          原文見:http://www.aygfsteel.com/Andyluo/archive/2005/12/08/23003.html

          posted @ 2005-12-09 03:48 羅明 閱讀(95) | 評論 (0)編輯 收藏
           
          14個開源項目,你看出來了嗎?

          圖中有14個著名的開源項目,你都能看出來嗎?(答案附文后)
          r_free-project-foundation.jpg


          答案:

          posted @ 2005-12-08 19:57 羅明 閱讀(748) | 評論 (1)編輯 收藏
           
          J2ME Tutorial, Part 3: 探究MIDP 2.0的游戲API(二)

          原文見:http://today.java.net/pub/a/today/2005/07/07/j2me3.html?page=2

          構建一個J2ME游戲:從GameCanvas類開始

          GameCanvas類繼承自Canvas,提供了一個屏幕后端的緩沖區,所有的繪制操作都先在這個緩沖區里進行。當所有繪制操作完成后,我們調用flushGraphics()方法將緩沖區內容輸出到屏幕。這種雙緩沖機制可以使圖像的移動更加平滑,避免圖像的閃爍。緩沖區大小等于屏幕的大小,而且每一個GameCanvas實例有且僅有一個緩沖區。

          GameCanvas類提供一種存儲按鍵狀態的機制,我們可以通過它方便的了解用戶與游戲的交互。這種機制可以跟蹤用戶按特殊鍵的次數,調用getKeyStates()方法返回所有游戲鍵按鍵狀態的二進制表示,1代表上次調用方法后按過該鍵,0表示上次調用后還沒有按過該鍵。我們可以跟蹤的游戲狀態有(這里的鍵都是在Canvas類里定義的):DOWN_PRESSED, UP_PRESSED, RIGHT_PRESSED, LEFT_PRESSED, FIRE_PRESSED, GAME_A_PRESSED, GAME_B_PRESSED, GAME_C_PRESSED和GAME_D_PRESSED。

          首先擴展GameCanvas類,定制一個游戲畫布,代碼見清單1。清單2是運行例子的MIDlet。

          package com.j2me.part3;

          import javax.microedition.lcdui.Image;
          import javax.microedition.lcdui.Display;
          import javax.microedition.lcdui.Graphics;
          import javax.microedition.lcdui.game.GameCanvas;

          import java.io.IOException;

          public class MyGameCanvas
              
          extends GameCanvas
              
          implements Runnable
          {
              
          public MyGameCanvas()
              
          {
                  
          super(true);
              }

              
              
          public void start()
              
          {
                  
          try
                  
          {
                      
          //導入couple圖片,坐標定位在屏幕中央
                      coupleImg = Image.createImage("/couple.gif");
                      coupleX 
          = CENTER_X;
                      coupleY 
          = CENTER_Y;
                  }

                  
          catch(IOException ioex)
                  
          {
                      System.err.println(ioex);
                  }

                  
                  Thread runner 
          = new Thread(this);
                  runner.start();
              }

              
              
          public void run()
              
          {
                  
          //獲取畫布的graphics對象
                  Graphics g = getGraphics();
                  
                  
          while(true//無窮循環
                  {
                      
          //基于上一個代碼清單列出的結構
                      
                      
          //首先檢查游戲狀態
                      verifyGameState();
                      
                      
          //檢查用戶輸入
                      checkUserInput();
                      
                      
          //更新屏幕
                      updateGameScreen(getGraphics());
                      
                      
          //休息一下,控制刷新頻率
                      try
                      
          {
                          Thread.currentThread().sleep(
          30);
                      }

                      
          catch(Exception e)
                      
          {}
                  }

              }

              
              
          private void verifyGameState()
              
          {
                  
          //現在先不做任何操作
              }

              
              
          private void checkUserInput()
              
          {
                  
          //獲取按鍵信息
                  int keyState = getKeyStates();
                  
                  
          //計算x軸位置
                  calculateCoupleX(keyState);
              }

              
              
          private void updateGameScreen(Graphics g)
              
          {
                  
          //清空屏幕背景
                  g.setColor(0xffffff);
                  g.fillRect(
          00, getWidth(), getHeight());
                  
                  
          //將couple圖片繪制到當前坐標位置
                  g.drawImage(
                      coupleImg, coupleX, coupleY, Graphics.HCENTER 
          |
                      Graphics.BOTTOM);
                  
                  flushGraphics();
              }

              
              
          private void calculateCoupleX(int keyState)
              
          {
                  
          //判斷移動方向
                  if((keyState & LEFT_PRESSED) != 0)
                  
          {
                      coupleX 
          -= dx;
                  }

                  
          else if((keyState & RIGHT_PRESSED) != 0)
                  
          {
                      coupleX 
          += dx;
                  }

              }

              
              
          private Image coupleImg;
              
          private int coupleX;
              
          private int coupleY;
              
          private int dx = 1//移動量
              
              
          //屏幕中心
              public final int CENTER_X = getWidth() / 2;
              
          public final int CENTER_Y = getHeight() / 2;
          }

          清單 1. MyGameCanvas:游戲畫布的第一個版本

          清單 2 是使用這個游戲畫布的MIDlet:

          package com.j2me.part3;

          import javax.microedition.lcdui.Display;
          import javax.microedition.midlet.MIDlet;

          public class GameMIDlet extends MIDlet
          {
              MyGameCanvas gCanvas;
              
              
          public GameMIDlet()
              
          {
                  gCanvas 
          = new MyGameCanvas();
              }

              
              
          public void startApp()
              
          {
                  Display d 
          = Display.getDisplay(this);
                  gCanvas.start();
                  
                  d.setCurrent(gCanvas);
              }

              
              
          public void pauseApp()
              
          {}
              
              
          public void destroyApp(boolean unconditional)
              
          {}
          }

          清單 2. 運行游戲示例的MIDlet類

          使用Wireless工具建立一個工程,導入這兩個類,然后生成并運行工程。確保你的工程目錄res中有這個圖片文件couple.gif,并保證名稱為couple.gif, 圖1是運行結果。

          j2me3_figure1.gif
          圖1. 構建一個游戲:使用GameCanvas類

          使用設備的方向鍵可以左右移動屏幕中的小圖像,這是通過從checkUserInput()里取得按鍵狀態,然后調用calculateCoupleX(),通過將按鍵狀態與GameCanvas里預定義的按鍵值進行與操作(&),得到用戶當前按的鍵,然后將實例變量更新,最終反映到設備屏幕上。

          圖像是在updateGameScreen()方法里被繪制到屏幕上的。這個方法使用傳入的Graphics對象進行繪制,每一個GameCanvas只有一個Graphics對象。方法首先擦除上次繪制的圖像,然后基于當前的coupleX值(還有一直不變的coupleY值)繪制couple.gif圖像,最后將緩沖區的數據輸出到屏幕。

          run()方法里的循環體遵循我們剛開始提出的游戲結構。循環每30毫秒檢查一次用戶輸入并刷新屏幕。你可以試著將這個值改變一下,這會改變刷新的頻率。

          最后,注意MyGameCanvas的構造器里調用了父類GameCanvas的構造方法,傳入的參數為true,這表示從Canvas類繼承的按鍵事件機制被抑制了,因為我們的代碼不需要這些通知機制。我們的游戲狀態用GameCanvas里自帶的按鍵信息(由getKeyStates()方法取得)來處理已經足夠了。通過抑制“keyPressed”、“keyReleased”和“keyRepeated”等通知機制,可以提高游戲的性能。

          posted @ 2005-12-08 18:01 羅明 閱讀(2603) | 評論 (3)編輯 收藏
           
          J2ME Tutorial, Part 3: 探究MIDP 2.0的游戲API (一)
          翻譯了java.net上的J2ME tutorial文章,Part 3介紹J2ME中的游戲開發部分
          介紹了javax.microedition.lcdui.game包中的類,通過開發一個完整的小游戲學習J2ME游戲開發。
          原文見:http://www.aygfsteel.com/Andyluo/archive/2005/12/07/22911.html
          posted @ 2005-12-08 04:52 羅明 閱讀(109) | 評論 (0)編輯 收藏
           
          更改Ubuntu系統的MAC地址(ZZ)
          如何修改Ubuntu Linux系統的物理地址,也適用于其他Linux
          原文見:http://www.aygfsteel.com/Andyluo/archive/2005/12/07/22907.html
          posted @ 2005-12-08 04:49 羅明 閱讀(98) | 評論 (0)編輯 收藏
           
          J2ME Tutorial, Part 3: 探究MIDP 2.0的游戲API (一)

          原文見:http://today.java.net/pub/a/today/2005/07/07/j2me3.html

          J2ME是一個很流行的用于移動設備游戲開發的平臺。J2ME中的MIDP 2.0引入了一個新的API包,它提供了一些定義好的游戲結構,這在以前的1.0版中要通過很多累贅代碼來實現。在這部分tutorial中,我們會學習這個API包,然后用它開發一個小游戲(為了學習需要,我們會用到包中所有的類)。這個包是javax.microedition.lcdui.game. 它的建立基于我們前兩次學的J2ME概念。

          J2ME游戲API:摘要
          javax.microedition.lcdui.game包只有5個類:GameCanvas, Layer, Sprite, TiledLayer和LayerManager. 這5個類提供了開發各種游戲應用的平臺。

          LayerSpriteTiledLayer的父類。這個類封裝了游戲中可視化元素的行為。可視化元素可以是小精靈(sprite),代表一個可以在屏幕上來回移動的獨立圖形(或組成動畫的一組圖形),
          或是一個背景層:通過很少的圖片,就可以生成龐大游戲中的背景。我們可以用Layer來布置圖形和進行可視化操作。Layer的子類通過重寫paint(Graphics g)方法將元素繪制到屏幕上。

          LayerManager類可以控制各層的繪制及繪制順序,因此我們可以更方便地管理游戲中的可視化元素(包括小精靈和背景層)。

          GameCanvas類擴展了上兩節我們講過的Canvas類(畫布),提供一個在屏幕后端運行(off-screen)的緩沖區,所有繪制操作都先在這個緩沖區上進行,然后再顯示到屏幕。它還提供了得到用戶按鍵信息的快捷方法。

          最好的學習方法應該是寫一個完整的小游戲,通過這個小游戲我們可以了解游戲制作的方方面面。我們在介紹完這個小游戲的構造后(針對目前還沒有游戲開發經驗的),會在開發游戲的過程中具體介紹包中的每個類。

          構建游戲的簡短入門

          游戲和動畫是建立在重復執行某段代碼的機制上的。這段代碼跟蹤實例變量的值,然后更新相應狀態。基于當前游戲狀態,代碼將游戲元素繪制到屏幕上。實例變量值是隨著用戶交互和游戲內部行為而改變的。

          代碼的重復執行是通過將這段代碼放入循環中實現的。在進入循環前,先檢查一下實例變量,看是否要繼續游戲,否則退出循環。為了控制實例變量的更新頻率(其實是屏幕刷新的頻率),循環體中的代碼應該每次休眠一段時間(毫秒計)。

          游戲的結構如下列代碼所示:

          // 主類
          public class MainClass 
          {
            
          private GameCanvas canvas = new MyGameCanvas();


            
          public MainClass() 
            
          {
              
          // 開始一個線程
              canvas.start();
            }

            
            
          // 其他代碼
          }



          // 實際進行繪制的類
          public class MyGameCanvas extends GameCanvas implements Runnable 
          {
            
          public MyGameCanvas() 
            
          {
              
          // 初始化
            }

            
            
          public void start() 
            
          {
              
          // 初始化
              
              
          // 執行繪制線程
              Thread runner = new Thread(this);
              runner.start();
            }

            
            
          private void run() 
            
          {
            
              
          // 或者使用(keeprunning = true) 
              
          // keeprunning是一個控制游戲狀態的實例變量

              
          while(true
              



                
          // 檢查游戲是否達到 
                
          // 某個邊界值或特殊條件
                
                verifyGameState(); 


                
          // 從用戶那里得到輸入,然后更新描述游戲元素狀態的變量值 
                
                  checkUserInput(); 


                
          // 使用Graphics對象將當前游戲狀態繪制到屏幕上

                updateGameScreen(getGraphics());


                
          // 控制屏幕更新的頻率 

                Thread.sleep(milliseconds); 
              }

            }

          }

           

          我們將在以下幾節中使用這個結構來開發一個游戲。

          posted @ 2005-12-07 20:40 羅明 閱讀(1869) | 評論 (0)編輯 收藏
           
          更改Ubuntu系統的MAC地址(ZZ)

          轉自:http://forum.ubuntu.org.cn/viewtopic.php?t=6774

          1、臨時更改(不需要重啟):
          代碼:
          $ sudo ifconfig eth0 down
          $ sudo ifconfig eth0 hw ether XX:XX:XX:XX:XX:XX
          $ sudo ifconfig eth0 up

          這樣做完以后default route可能就沒有了,要重新加一下
          代碼:
          $ sudo route add default gw xxx.xxx.xxx.xxx

          2、永久更改:
          代碼:
          $ sudo gedit  /etc/iftab 


          eth0 mac 00:e0:4d:75:8e:50(改成你要的物理地址mac)

          代碼:
          $ sudo gedit  /etc/network/interfaces

          將iface eth0 inet static后面添加一行

          hwaddress ether 00:E0:4d:75:8E:50

          如:iface eth0 inet static
          hwaddress ether 00:E0:4d:75:8E:50(自己加的)
          address 219.220.214.113
          。
          。
          。

          然后就好了 可能要重啟一下

          posted @ 2005-12-07 19:52 羅明 閱讀(2585) | 評論 (1)編輯 收藏
           
          就當寫畢業日志吧?。?!
          今天沒有去公司,我可不想公司為我一個人訂飯(公司里泡面的泡面,回家的回家,包子的包子),昨天因為只有我一個人要訂飯,后來硬是湊了三個人,怕飯店不給送飯呢。我還是先在機房躲躲吧,tmd吉林石化,搞得我上班都沒意思。
          昨天聽頭頭說有短信的項目做,要我先裝一個Oracle, 然后把n多表導進去?,F在還不知道做啥,數據庫已經弄好了(Software上的Oracle不好使,下了半天,最后沒裝上,說缺少組件,爛),表也導進去了。可憐我的30G硬盤,我是邊裝邊刪啊。今天類似的“您的硬盤空間不夠,請點擊這里釋放”提示已經出現不下6次了。下次再要有什么變動,我就格了重裝,反正Home和Professional差不多(嗬嗬,只是盜版與正版的區別)。
          J2ME的tutorial看到Part2了,學了幾個控件,知道了MIDlet的lifecycle(不就是applet的lifecycle嘛!it's much the same).繼續看
          明天寫幾個java程序連下數據庫,就可以找頭頭要任務了,hoho
          繼續學習j2me,
          Go on, be a tiger!
          PS: 發現學自己感興趣的東西一點都不累(我還是很注意休息的哦,多吃水果), 今天比較有成就感,哈哈
          posted @ 2005-12-07 05:07 羅明 閱讀(80) | 評論 (0)編輯 收藏
           
          就當寫畢業日志吧?。。?/div>
          ?
          今天沒有去公司,我可不想公司為我一個人訂飯(公司里泡面的泡面,回家的回家,包子的包子),昨天因為只有我一個人要訂飯,后來硬是湊了三個人,怕飯店不給送飯呢。我還是先在機房躲躲吧,tmd吉林石化爆炸搞的松花江污染,搞得我上班都沒意思。
          ?
          昨天聽頭頭說有短信的項目做,要我先裝一個Oracle, 然后把n多表導進去?,F在還不知道做啥,數據庫已經弄好了(Software上的Oracle不好使,下了半天,最后沒裝上,說缺少組件,kick),表也導進去了??蓱z我的30G硬盤,我是邊裝邊刪啊。今天類似的“您的硬盤空間不夠,請點擊這里釋放”提示已經出現不下6次了。下次再要有什么變動,我就格了重裝,反正Home和Professional差不多(嗬嗬,只是盜版與正版的區別,支持正版?。?。
          ?
          J2ME的tutorial看到Part2了,學了幾個控件,知道了MIDlet的lifecycle(不就是applet的lifecycle嘛!it's much the same).繼續看
          ?
          明天寫幾個java程序連下Oracle,就可以找頭頭要任務了,hoho
          繼續學習j2me,
          Go on, be a tiger!
          ?
          PS: 發現學自己感興趣的東西一點都不累(我還是很注意休息的哦,多吃水果), 今天比較有成就感,哈哈
          posted @ 2005-12-06 21:08 羅明 閱讀(157) | 評論 (0)編輯 收藏
           
          這幾天開始學習J2ME,從網上找了些資料,決定按J2ME Wiki的路線走:
          1、Tutorial
          里面有幾篇java.net里的入門文章,講的是MIDP 2.0和CLDC 1.1(最新版本),使用的工具是J2ME Wireless Toolkit 2.2(最新的release版,2.3beta已經出來了)。盡管這個系列主要使用工具Toolkit,但在一開始的時候先不用toolkit做了個項 目,符合初學一種技術的步驟。

          Getting Started with MIDP 2.0

          J2ME Tutorial, Part 1: Creating MIDlets

          J2ME Tutorial, Part 2: User Interfaces with MIDP 2.0

          J2ME Tutorial, Part 3: Exploring the Game API of MIDP 2.0

          J2ME Tutorial, Part 4: Multimedia and MIDP 2.0

          2、Articles(從網上搜集的文章):
          MIDlet Development with J2ME and MIDP.pdf
          MIDlet Development with Version 2.0 of the Wireless Toolkit.pdf
          J2ME development with EclipseMe.pdf

          2、Books
          J2ME應用程序: 《J2ME in a Nutshell》
          J2ME Gaming:
          《Wireless.Game.Development.in.Java.with.MIDP.2.0.Oct.2004》、
          《J2ME & Gaming》

          對J2ME感興趣的同胞,等著看我的Blog吧

          *****************************************
          12:35 12/05/2005
          在Amazon看了所有相關書籍的讀者反饋,發現《J2ME in a Nutshell》是2002年出版的,只有MIDP 1.1內容,所以換成《Wireless Java: Developing with J2ME, Second Edition》(讀者反饋挺好的)
          posted @ 2005-12-05 19:33 羅明 閱讀(119) | 評論 (0)編輯 收藏
           
          這幾天開始學習J2ME,從網上找了些資料,決定按J2ME Wiki的路線走:
          1、Tutorial
          里面有幾篇java.net里的入門文章,講的是MIDP 2.0和CLDC 1.1(最新版本),使用的工具是J2ME Wireless Toolkit 2.2(最新的release版,2.3beta已經出來了)。盡管這個系列主要使用工具Toolkit,但在一開始的時候先不用toolkit做了個項 目,符合初學一種技術的步驟。

          Getting Started with MIDP 2.0 

          J2ME Tutorial, Part 1: Creating MIDlets 

          J2ME Tutorial, Part 2: User Interfaces with MIDP 2.0 

          J2ME Tutorial, Part 3: Exploring the Game API of MIDP 2.0 

          J2ME Tutorial, Part 4: Multimedia and MIDP 2.0

          2、Articles(從網上搜集的文章):
          MIDlet Development with J2ME and MIDP.pdf
          MIDlet Development with Version 2.0 of the Wireless Toolkit.pdf
          J2ME development with EclipseMe.pdf

          2、Books
          J2ME應用程序: 《J2ME in a Nutshell》
          J2ME Gaming:
          《Wireless.Game.Development.in.Java.with.MIDP.2.0.Oct.2004》、
          《J2ME & Gaming》

          對J2ME感興趣的同胞,等著看我的Blog吧

          *****************************************
          12:35 12/05/2005
          在Amazon看了所有相關書籍的讀者反饋,發現《J2ME in a Nutshell》是2002年出版的,只有MIDP 1.1內容,所以換成《Wireless Java: Developing with J2ME, Second Edition》(讀者反饋挺好的)
          posted @ 2005-12-05 12:54 羅明 閱讀(479) | 評論 (0)編輯 收藏
           
          別妄想會在以后去每個分類里找東西。將所有的書簽都放在頂層,這才是你的注意力所在!
          posted @ 2005-12-04 19:22 羅明 閱讀(126) | 評論 (0)編輯 收藏
           
          今天逛論壇時發現的,藍迪游戲其實是一個跨平臺的網游,支持W$、Linux和Mac, 是國產的網游,所以速度還比較快,跟QQ游戲大廳的樣子差不多,現在有麻將、斗地主、軍旗等幾種游戲。做得挺好,玩的比較舒服。

          現在主要是Linux和Mac的玩家,Mac居多,W$的最少。

          玩了一個多點,差點忘吃午飯了,呵呵

          網址:www.bluedj.com
          posted @ 2005-12-04 11:27 羅明 閱讀(2293) | 評論 (2)編輯 收藏
           
          如果我的大學生活重新來過,我會在大一時配一臺電腦,學會編程和裝機;在大二時申請一個域名,裝一個Linux系統,做一臺服務器,提供Weblog等功能。。。再慢慢做精做大.....
          posted @ 2005-12-04 11:27 羅明 閱讀(343) | 評論 (0)編輯 收藏
           
          別妄想會在以后去每個分類里找東西。將所有的書簽都放在頂層,這才是你的注意力所在!
          posted @ 2005-12-04 11:27 羅明 閱讀(417) | 評論 (0)編輯 收藏
           
          ...
          如果我的大學生活重新來過,我會在大一時配一臺電腦,學會編程和裝機;在大二時申請一個域名,裝一個Linux系統,做一臺服務器,提供Weblog等功能。。。
          posted @ 2005-12-03 03:47 羅明 閱讀(93) | 評論 (0)編輯 收藏
           
          今天逛論壇時發現的,藍迪游戲其實是一個跨平臺的網游,支持W$、Linux和Mac, 是國產的網游,所以速度還比較快,跟QQ游戲大廳的樣子差不多,現在有麻將、斗地主、軍旗等幾種游戲。做得挺好,玩的比較舒服。

          現在主要是Linux和Mac的玩家,Mac居多,W$的最少。

          玩了一個多點,差點忘吃午飯了,呵呵

          網址:www.bluedj.com
          posted @ 2005-12-01 03:23 羅明 閱讀(111) | 評論 (0)編輯 收藏
          僅列出標題
          共14頁: First 上一頁 2 3 4 5 6 7 8 9 10 下一頁 Last 
           
          主站蜘蛛池模板: 交城县| 闽清县| 海林市| 汽车| 肇庆市| 罗源县| 攀枝花市| 新安县| 腾冲县| 大姚县| 保亭| 双辽市| 永泰县| 沭阳县| 龙泉市| 潢川县| 安阳市| 枣阳市| 苍南县| 历史| 五华县| 肥东县| 高雄市| 普安县| 肇州县| 莎车县| 九龙坡区| 登封市| 运城市| 宣汉县| 连云港市| 昌都县| 房山区| 嘉善县| 剑河县| 廊坊市| 旌德县| 金寨县| 永春县| 枣庄市| 湖南省|