天天看點

Effective J2ME (1)

本文節選于筆者在數年前開發手機遊戲時總結的一份文檔。一家之言,贻笑大方。

1 J2ME開發基礎

1.1 計算幾何在J2ME開發中的應用

      由于支援J2ME的裝置通常不支援浮點運算,是以對于某些特定的問題可以通過計算幾何學的方法解決。例如判斷兩條線段是否相交的算法,在支援浮點運算的裝置上可以通過聯立方程組求解的方法解決。在不支援浮點運算的裝置上則需要通過計算幾何的向量運算來解決。常見的可以通過計算幾何學的方法解決的問題有 1、判斷兩線段是否相交;2、判斷線段、折線、多邊形是否在矩形中;3、判斷矩形是否在矩形中;4、判斷圓是否在矩形中;5、判斷點是否在多邊形中;6、判斷折線是否在多邊形内;7、求線段或直線與折線、矩形、多邊形的交點;8、凸包的求法等等。具體的算法可以查閱計算幾何學相關的教科書。

1.2 有限狀态機在J2ME開發中的應用

      有限狀态機在硬體設計、編譯理論等許多方面有着廣泛的應用。它同樣适合遊戲開發。例如在ForrestWarrior遊戲中,Player類就采用有限狀态機來控制各種狀态之間的遷移。Player有以下幾種狀态1、站立;2、站立行走;3蹲;4、蹲着行走;5、跳躍;6、下落。同時在1、3、5和6狀态下可以進行攻擊(由于J2ME不響應同時按鍵,是以在2和4狀态下不能攻擊)。如果采用條件分支語句進行狀态判斷的話,判斷邏輯将會異常複雜而且難于修改和調試。而在采用了有限狀态機之後,控制邏輯大大簡化。具體代碼可以參考ForrestWarrior遊戲中的Player類和State類。

1.3 J2ME遊戲中尋徑算法的設計政策

      一提到尋徑算法,大家通常都會想到A*算法。但是由于支援J2ME裝置的運算能力有限,堆棧的大小也不适合做複雜的遞歸運算,是以尋徑算法的設計要針對每款遊戲的特點進行設計。例如在雷鳥号遊戲中,每架飛機(軍艦、坦克)的尋徑政策已經編碼在劇情檔案中,這樣做的優點在于可以有效的控制飛機的編隊移動。在BomberMan遊戲中,利用動态的閥值控制NPC的移動。具體政策就是通過設定不同的閥值上下限,同時在每一次移動之後對閥值進行微調的方法來控制移動中變向的頻率。在荒島探寶遊戲中則采用了更精确的尋徑算法。具體政策是采用廣度優先算法搜尋與Player連通的區域(通過調整搜尋隊列的大小來控制搜尋的範圍)。在搜尋的過程中,如果某個點和Player連通,則同時标記與Player的距離。有了這些資料之後,NPC的尋徑政策就變得相對簡單。在NPC的每次移動之前,首先判斷目前所在的位置和Player是否連通,如果不連通就采用同BomberMan遊戲中的NPC類似的算法進行移動;如果連通,就走向與 Player的距離更小的那個點。