1. 程式人生 > >HTML5+JS遊戲開發模組----發射多顆子彈

HTML5+JS遊戲開發模組----發射多顆子彈

現在開始射擊遊戲中發射子彈模組,說實話,這是我上網查詢資源自學後,自己搗鼓的。由於興趣支撐,由於缺乏正規教程,而我又沒有錢培訓,基礎不好也不敢冒險培訓。所以,程式碼很初級,更多是為了實現某種目的,按鍵處理這塊處理很不友好,不喜勿噴!

趁著還有點熱愛,趕緊發發文章,避免一事無成。

多顆子彈有幾個難點:

1.子彈物件

2.子彈的陣列,儲存很多子彈物件

3.怎樣為不同的子彈載入獨立的計時器

4.按鍵觸發射擊,怎樣控制發射時間(百度好久,沒找到解決方案,我只是簡單設定固定時間差,效果很差)

首先,簡單的html架構不說了,上子彈類構建,子彈類有xy方向屬性,有繪畫屬性,有運動屬性,有獨立計時器

//子彈類
function Bullet(x,y,direct){
	this.x=x;
	this.y=y;
	this.direct=direct;//方向
	this.timer;//每個子彈分配一個計時器
}
//畫子彈屬性
Bullet.prototype.draw=function(){
		//畫出所有子彈
		for(var i=0;i<bull.length;i++){
			var b=bull[i];
			//save restore意味著裡面所有操作對外變沒影響
			ctx.save();
			ctx.beginPath();//開始路徑
			ctx.fillStyle='red';//顏色
			ctx.fillRect(b.x,b.y,8,8);//用矩形表示子彈
			ctx.closePath();//閉合路徑
			ctx.restore();
		}
}
//子彈運動屬性
Bullet.prototype.run=function(){
		switch(this.direct){
		case 0:
				this.y-=2;
				break;
		case 1:
				this.y+=2;
				break;
		case 2:
				this.x-=2;
				break;
		case 3:
				this.x+=2;
				break;
	} 
}
接下來,開始子彈陣列以及為子彈開設獨立定時器
//初始化子彈物件陣列,按下一次鍵就建立一個物件例項
bull=[];
Bu=new Bullet(400,150,direct);
bull.push(Bu);//將子彈物件推入陣列
bull[bull.length-1].timer=setInterval('bull['+(bull.length-1)+'].run()',50);//設定獨立定時器

到此,子彈發射的子彈陣列,子彈獨立運動基本上完成,上面程式碼註釋已經很詳細了,相信大家應該都能夠看懂,接下來無法就是按鍵觸發,頁面不斷清除,重畫過程

老規矩,我設定的程式入口game()函式

程式碼如下

document.body.onload=game();//程式入口
程式初始化init()函式,程式不斷重新整理重畫函式gameLoop()使用requestAnimationFrame相容動畫計時器進行不斷重新整理,原諒我無法解釋,我在網上抄來的。

最後,說明下,長空格鍵發射子彈,方向是隨機產生的,後期筆記會跟隨發射物件方向,子彈不做邊界檢測,不做碰撞檢測,後期筆記在加上。只有試過,才知道原來自己這麼差勁,加油!

完整程式碼