【程式設計-C#】打磚塊遊戲 – 同時播放背景音樂與音效
設計遊戲所需資源關鍵字:電動遊戲 – Video game, 打磚塊 – Arkanoid, 音效 – sound, 背景 – background, 圖片- picture, 角色 – character, 魔王 – boss
背景音樂下載
打磚塊遊戲設計資源 :
在一個遊戲中,會有背景音樂,然後,遇到一些事件要產生特定的音效,用傳統的方式播放音樂/音效,會只聽到一個聲音…
為了要”同時”播放背景音樂與音效,我們要用二種不同的播放器,否則,當播放一個音效時,背景音樂就會停止:
- .Windows內建的WindowsMediaPlayer
- Net本身的Windows.Media.SoundPlayer類別
要使用Windows內建的WindowsMediaPlayer,需先加入C:\Windows\System32\wmp.dll到參考中,操作方式如下:
請先把聲音檔加入專案中,並設置”一律複製”:
我們將播放撞擊聲寫成一個方法,方便我們反覆的叫用這個方法來播放適當的聲音:
private void playBom() //播放撞擊音樂方法 { var player1 = new WMPLib.WindowsMediaPlayer(); player1.URL = "collision.wav"; //撞擊聲,我們的聲音檔像圖片一樣加入專案中。 }
然後,在需要播放撞擊聲時,進行上述方法的呼叫:擊中球拍與磚塊
//球拍是否擊中球: if (ball.Left >= racket.Left && ball.Left <= (racket.Left + racket.Width) && ball.Top >= (racket.Top - ball.Height)) { Y_Inc = -Y_Inc; playBom(); }
//一一測試每顆磚塊是否被球擊中 for (int i = bricks.GetLength(0) - 1; i >=0 ; i--) { for (int j = bricks.GetLength(1) - 1; j >= 0 ; j--) { if (bricks[i, j].Visible == true) // 若磚塊是可見的話…,表示磚塊尚未被擊中 { if (ball.Left >= bricks[i, j].Left && ball.Left <= (bricks[i, j].Left + bricks[i, j].Width) && ball.Top <= (bricks[i, j].Top + bricks[i, j].Height)) { Y_Inc = -Y_Inc; playBom(); bricks[i, j].Visible = false; //判定擊中後,球的垂直移動方向改變,並將磚塊的Visible屬性設false,使其看不見 goto HitBrickExit; //一旦擊中,就不用測試其他的磚塊…,跳離這個測試以節省時間 } } } } HitBrickExit:
背景音樂以C#的Windows.Media.SoundPlayer類別來播放(放在Form1方法的最後段)
//播放背景音樂 System.Media.SoundPlayer player = new System.Media.SoundPlayer("POL-cooking-mania-short.wav"); player.PlayLooping();
專案檔下載:BrickBreakout – 3
音樂與音效資源: