HTML5+JS遊戲開發模組----發射多顆子彈
阿新 • • 發佈:2019-02-11
現在開始射擊遊戲中發射子彈模組,說實話,這是我上網查詢資源自學後,自己搗鼓的。由於興趣支撐,由於缺乏正規教程,而我又沒有錢培訓,基礎不好也不敢冒險培訓。所以,程式碼很初級,更多是為了實現某種目的,按鍵處理這塊處理很不友好,不喜勿噴!
趁著還有點熱愛,趕緊發發文章,避免一事無成。
多顆子彈有幾個難點:
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()函式
程式碼如下
程式初始化init()函式,程式不斷重新整理重畫函式gameLoop()使用requestAnimationFrame相容動畫計時器進行不斷重新整理,原諒我無法解釋,我在網上抄來的。document.body.onload=game();//程式入口
最後,說明下,長空格鍵發射子彈,方向是隨機產生的,後期筆記會跟隨發射物件方向,子彈不做邊界檢測,不做碰撞檢測,後期筆記在加上。只有試過,才知道原來自己這麼差勁,加油!