鍍金池/ 教程/ Android/ Android 坦克大戰(zhàn)游戲設(shè)計解析四
Android 坦克大戰(zhàn)游戲設(shè)計解析八
Android 坦克大戰(zhàn)游戲設(shè)計解析一
Android 坦克大戰(zhàn)游戲設(shè)計解析五
Android 坦克大戰(zhàn)游戲設(shè)計解析六
Android 坦克大戰(zhàn)游戲設(shè)計解析七
Android 坦克大戰(zhàn)游戲設(shè)計解析二
Android 坦克大戰(zhàn)游戲設(shè)計解析三
Android 坦克大戰(zhàn)游戲設(shè)計解析四

Android 坦克大戰(zhàn)游戲設(shè)計解析四

有了游戲所需的圖象及聲音資源后,下面就可以開始定義游戲中的各種角色。為了方便起見,坦克大戰(zhàn)游戲中定義了一個角色接口。

public interface Actor{

////////////////////////////////////////////////////////////////////////////

/**
* Operation be done in each tick.
*/
void tick();
}

該接口有一個 tick 方法,為每個游戲幀該角色所要完成的動作,比如說背景可能要更換圖形以形成動畫效果(如水面波浪)。坦克可以完成前面一步,子彈飛行等等。

坦克大戰(zhàn)游戲中定義了背景類 BattleField ,子彈 Bullet,各種坦克類(Tank, PlayTank, EnemyTank, FastTank, HeavyTank, SimpleTank, PlayerTank,SmartTank) , 升級法寶 Powerup,以及動態(tài)顯示的分?jǐn)?shù) Score 類,都實現(xiàn)了 Actor 接口。

而這些角色類同時又是 Game API 中 Layer 的子類。因些游戲邏輯比較簡單,下面代碼是 GameScene 中線程 Run 的方法,為游戲進(jìn)行時主線程

public void run(){
    Thread currentThread = Thread.currentThread();

    try {
        while (currentThread == animationThread) {
        long startTime = System.currentTimeMillis();
        // Don't advance game or draw if canvas is covered by a system
        // screen.
        if (isShown()) {
           tick();
        if(hasSurface){
           Canvas canvas=holder.lockCanvas();
           updateGame(canvas);
           holder.unlockCanvasAndPost(canvas);
        }
       }
      timeTaken = System.currentTimeMillis() - startTime;
      if (timeTaken < MILLIS_PER_TICK) {
        synchronized (this) {
          if(MILLIS_PER_TICK > timeTaken){
         wait(MILLIS_PER_TICK - timeTaken);
         timeTaken = System.currentTimeMillis() - startTime;
      }
     }
  } else {
        Thread.yield();
    }
}
   } catch (InterruptedException e) {
}

}

而其中的 tick() 方法就是調(diào)用游戲中所有角色的 tick() 方法:

private void tick(){

for(int i=0;i<TOTALLAYERS;I++){
Layer layer=layerManager.getLayerAt(i);
if(layer.isVisible()){
Actor actor=(Actor)layer;

actor.tick();
}
}
applyGameLogic();
}

這樣參與游戲中的各個角色完成自已每幀所需要更新,整個游戲就動起來了。

http://wiki.jikexueyuan.com/project/android-game-design/images/14.jpg" alt="pic" />

在后面的文章將主要介紹各個角色類的基本實現(xiàn)方法。