当前位置:嗨网首页>书籍在线阅读

33-关卡和游戏结束

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.12.3 关卡和游戏结束

需要检查游戏和关卡是否结束,这样才能判断是否开始一个新游戏或新关卡。

1.关卡结束

在每帧中检查关卡是否结束。以下是用于检查关卡是否结束的函数。

function checkForEndOfLevel(){
  if (rocks.length==0){
   switchGameState(GAME_STATE_NEW_LEVEL);
  }
}

一旦rocks数组的长度等于0,就把游戏状态切换为GAME_STATE_NEW_LEVEL。

2.游戏结束

不需要在每一帧都检查游戏是否结束,只需要在玩家失去一艘飞船时进行检查就足够了。在gameStatePlayerDie()函数中可以实现这个功能。

function gameStatePlayerDie(){
  if (particles.length >0 || playerMissiles.length>0){
   fillBackground();
   renderScoreBoard();
   updateRocks();
   updateSaucers();
   updateParticles();
   updateSaucerMissiles();
   updatePlayerMissiles();
   renderRocks();
   renderSaucers();
   renderParticles();
   renderSaucerMissiles();
   renderPlayerMissiles();
   frameRateCounter.countFrames();
  }else{
   playerShips--;
   if (playerShips<1){
     switchGameState(GAME_STATE_GAME_OVER);
   }else{
     resetPlayer();
     switchGameState(GAME_STATE_PLAYER_START);
   }
  }
}

当游戏处于GAME_STATE_PLAYER_DIE状态时,程序将在每一帧中调用这个状态函数。函数会先检查屏幕上是否还有碎片。这样可以确保游戏在玩家飞船爆炸结束之后才终止。还需要检查导弹,以确保所有导弹的生命都已终结。这样做就可以检查到所有playerMissile与陨石和飞碟之间的碰撞。这样,玩家就有可能在最后一艘飞船爆炸时获得另外的奖励飞船。

一旦所有碎片和导弹都从屏幕上消失,就将playerShips变量减1。如果playerShips小于1,则切换到GAME_STATE_GAME_OVER状态。