Javascript實現飛機大戰小遊戲
原始碼地址:https://github.com/markLijun/planeWar
最近看到一個用JS寫的坦克大戰小遊戲,覺得好神奇,於是自己嘗試著寫了一個飛機大戰。
敵機類
function Enemy(x, y) this.x = x; this.y = y; this.moveId = null; this.isLive = true;//當子彈打中敵機或敵機落地時死亡,isLive屬性標記敵機是否已死 this.run = function run() { if (this.y > boxheight || this.isLive == false) { window.clearInterval(this.moveId);//如果飛機已經死亡,停止運動,this.moveId會在生產飛機的時候賦值 this.isLive = false; } else { this.y += 2.5; } } }
生產敵機的函式
function procuceEnemy() { var x = Math.ceil(Math.random() * (boxwidth - planewidth));//敵機的橫座標,為畫布寬度減去飛機寬度之間的隨機值 theEnemy = new Enemy(x, boxy); allEnemy.push(theEnemy);//allEnemy負責儲存所有敵機,將新生產的敵機推入allEnemy棧 var moveId = window.setInterval("allEnemy[" + (allEnemy.length - 1) + "].run()", 60);//這是重點,使新制造的敵機每60ms run一次,並獲得新敵機的moveId allEnemy[(allEnemy.length - 1)].timer = timer;//把獲得的moveId送給敵機類中的moveId,這裡是物件引用 }
畫敵機的函式
function drawEnemy() {
for (var i = 0; i < allEnemy.length; i++) {//遍歷所有敵機(包括已死亡的和未死亡的)
if (allEnemy[i].isLive ==true) {//挑選出活著的敵機(即應該出現在畫面上的敵機)
ctx.drawImage(enemyImage, allEnemy[i].x, allEnemy[i].y, enemywidth, enemyheight);//將它們畫在畫布上
}
}
}
為了使飛機的運動更加流暢,可以使用setInterval()函式改變飛機的座標,按下方向鍵就會呼叫這個函式,鬆開就會取消。