相信在手機遊戲開發這塊是j2me的天下,一是因為它簡單容易學,二是因為關於它的資料多。
而j2me畢竟是執行在symbian os的核心之上的,速度慢也是必然的了,更不能忍受的是它把很多與底層的互動封裝了起來,並且不提供介面讓你訪問。
這對於我這樣喜歡刨根問低的人來說,是實在無法忍受的!
下面我就把最近一段時間的學習總結一下:
(一)關於開發工具
原本是沒有必要寫這個的,不過看到網上五花八門的工具配置、工具安裝的文章,實在覺得有必要出來澄清一下。
其實,完全沒必要為選擇什麼ide來煩惱,無論是moblie borland c++、vc、vc.net、codewarrior還是nokia最近力推的carbide.c++,他們都存在著這樣那樣的問題。沒有乙個是完美的開發工具,而且series的sdk還為每一種開發工具提供了不同的版本,真是感覺有點"光了屁股系褲腰帶-----多那麼一道子"。ide只能用來看源**或者寫**,真正有用的還是sdk下的command命令列,不要怕麻煩,這些往往是最重要的。
命令也就是常用的那麼幾個:
bldmake bldfiles
abld build wins udeb
epoc
makesis
devices
(二)關於鍵盤互動
無論做什麼樣的遊戲,都少不了與使用者的互動,而對於手機裝置來說。與使用者互動的無非是鍵盤,按鍵事件是系統事件的一種,一旦裝置鍵盤上的鍵被按下、按住或釋放的時候即會產生按鍵事件。
symbian的window伺服器通過控制項棧把按鍵事件傳遞到應用程式。然後通過呼叫控制項的offerkeyeventl()方法把按鍵事件通知相應的控制項。這和我們在j2me裡通過keypressed(int keycode)把相應的按鍵事件通知相應的canvas類一樣。
ok,我們現在有了第乙個模擬的關係:
symbian的offerkeyeventl() j2me的
keypressed(int keycode)
當然,symbian裡這個方法還有一些需要特別說明的不同之處。
這和我們的j2me裡不一樣,j2me裡keypressed(int keycode)是和相應的canvas裡關聯在一起的。試著想象一下,如果從乙個from高階ui切換到canvas的低階ui,是不是需要用command命令來控制?
然後就可以通過呼叫控制項的offerkeyeventl()把按鍵事件傳遞給該控制項。控制項可以自己決定是否處理某個按鍵事件,如果處理事件,則返回值ekeywasconsumed,否則返回ekeywasnotconsumed。按鍵事件會按次序傳遞給控制項棧中的每個控制項,直至其中某個控制項返回ekeywasconsumed或沒有剩餘控制項為止。
offerkeyeventl()有兩個引數:按鍵事件(const ekeyevent& akeyevent)、按鍵型別(teventcode atype)。前者表明按鍵是哪乙個鍵等資訊,後者則是乙個emnu型別,說明按鍵事件的種類。
和我們在j2me裡不同的是,j2me裡用三個方法來分別表示pressed、released、repeated。而symbian裡用乙個emnu型別的引數來說明按鍵事件的種類,分別是:eeventkeydwon、eeventkey、eeventkeyup。
用以下**來做為事例恐怕更能說明問題:
tkeyreponse cmycontrol::offerkeyeventl(const tkeyevent& akeyevent,teventcode atype) }
return ekeywasnotconsumed; }
最近剛學完了J2ME
先宣告下,我以前一直是在做server端程式設計的,尤其是最近一直在折騰eco 3 for dotnet,進軍下j2me完全是因為跟風。說起 學完j2me 其實也不能說學完,只是學了其中的一部分,我目前開發中有需要的那部分。包含了高階gui應用 低階canvas部分對我來說沒什麼用 資料儲存,網路通...
J2me遊戲中關於遊戲計分顯示
銷毀普通坦克記10分,打死發射子彈坦克記20分,打死快速移動坦克記30分,本次遊戲一共有15個敵人坦克,所以遊戲的總分數為 5 10 20 30 300,當分數為300時遊戲結束。遇到的問題 如何記錄分別打死不同型別的坦克記不同的分數,一開始我使用玩家坦克的子彈碰撞檢測是否碰到了敵人坦克,並且分別實...
J2ME遊戲按鍵處理方法簡述
j2me遊戲按鍵處理方法簡述 正文 1 scankey 方法 這種方法使在keypressed keyrelease 中記錄按鍵的情況,每次game loop之前使用scankey 函式獲得需要的記錄情況,這次gameloop都會使用它產生的按鍵結果。這種方法的缺陷是兩次scankey 的時間間隔內...