2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第七章 音樂音效.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

芋見豆花 南臺科技大學─四技應用日語系 組員: 應用日語一乙 4A3E0003 江佳蓁 應用日語一乙 4A3E0006 鄭怡芳
项目7 面向对象高级.
計算機程式語言實習課.
四資二甲 第三週作業 物件導向程式設計.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
類別與物件 Class & Object.
File Access 井民全製作.
第 1 章 使用 APP INVENTOR 2 開發 ANDROID APP
程式設計概論 1.1 程式設計概論 程式語言的演進 物件導向程式 程式開發流程 1.2 C++開發工具
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
LINQ 建國科技大學 資管系 饒瑞佶.
第四章 在 C# 中实现 OOP 概念.
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第三章 C#面向对象初级编程 面向对象得程序设计越来越受到编程人员的喜爱。类和对象是面向对象程序设计中的重要概念。封装性、继承性和多态性是面向对象的特点,本章旨在全面说明C#编写面向对象程序设计的方法。
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
類別(class) 類別class與物件object.
R教學 安裝RStudio 羅琪老師.
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 2D圖形與字型的呈現.
安裝JDK 安裝Eclipse Eclipse 中文化
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
C#面向对象程序设计 $7 继承和多态性.
第6章 继承和接口设计 6.1 继 承 6.2 多态性 6.3 抽象类 6.4 接口 6.5 接口在集合排序中的应用.
并发机制 结果应该为: 线程 1: 1 线程 1: 2 线程 1: 3 线程 1: 4 线程 1: 5 线程 2: 6 线程 2: 7
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第五章 頂點定義與基本形狀的繪出.
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第九章 相機類別與玩家角色.
第二章 SPSS的使用 2.1 啟動SPSS系統 2.2 結束SPSS系統 2.3 資料分析之相關檔案 2.4 如何使用SPSS軟體.
Java 程式設計 講師:FrankLin.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Ch02-基礎語法.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第一單元 建立java 程式.
VS.NET 2003 IDE.
網路程式設計期末project B 張芸菱.
Totoro大冒險 電腦遊戲設計 資三B 李沛儀 資三B 張家瑜.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
第 19 章 XML記憶體執行模式.
PowerPoint 2019/4/9.
電腦遊戲設計期末報告 林鴻文 陳韋瑄 徐久泰.
C#程序设计基础 $3 成员、变量和常量.
期末考.
VS.NET 2003 IDE.
第四章 类 4.1 基础知识 4.2 构造函数 4.3 方法 4.4 属性与索引 4.5 String类
Class & Object 靜宜大學資工系 蔡奇偉副教授 ©2011.
HelloPurr_Extend 靜宜大學資管系 楊子青
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第三章 XNA 遊戲程式基本架構.
利用 EditorConfig 自訂文字編輯器設定
幼兒發展學習的評量與輔導---- 第四章—收集資料
函數應用(二)與自定函數.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
進階UI元件:ListView元件以及複選 靜宜大學資管系 楊子青
實驗十:影片播放.
MultiThread Introduction
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
JAVA 程式設計與資料結構 第三章 物件的設計.
開發Java程式語言的工具 JDK.
Windows Phone Game 行動遊戲開發
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Scratch: 動畫或遊戲編程 任務3:海洋世界.
SQLite資料庫 靜宜大學資管系 楊子青.
Develop and Build Drives by Visual C++ IDE
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

2D / 3D 遊戲程式設計入門 使用 XNA 3.0 與 C# 第七章 音樂音效

本章目的 介紹如何在XNA中使用音樂音效 熟悉XACT開發工具的入門操作 熟悉XNA 3.0簡單的音樂音效播放方式

7.1 XACT工具 Cross-Platform Audio Creation Tool 用來產生音效專案相關檔案以供XNA專案使用 『開始』『所有程式』『Microsoft XNA Game Studio 3.0』『Tools』『Microsoft Cross-Platform Audio Creation Tool (XACT)』

XACT視窗畫面

新增一個XACT專案

新增一個Wave 檔案倉庫 Wave 檔案倉庫 (Wave Bank) 可以用來儲存多個音樂音效會使用到的Wave 檔案

加入Wave 檔案到 Wave Bank

聲音倉庫 (Sound Bank) 聲音倉庫 (Sound Bank) 可以用來儲存多組聲音實體

聲音倉庫 (Sound Bank)

新增聲音實體 要新增聲音實體只要把在Wave Bank中的Wave檔案拖曳入Sound Bank視窗的左下角子「Cue Name」區塊下

建立音效音樂相關檔案 在Win目錄下會產生三個檔案 .xgs (XNA global setting 通用設定檔) .xsb (XNA sound bank 檔) .xwb (XNA wave bank 檔)。

7.2 XNA 加入 XACT專案

加入XACT專案中所使用到的Wave 檔案

XNA 加入 XACT專案

7.3 範例一:實作一個音效類別 『專案』『加入類別』 選擇『類別』,並將此類別名稱設為MyAudio.cs

7.3 範例一:實作一個音效類別 //MyAudio.cs using Microsoft.Xna.Framework.Audio; namespace WindowsGame1 { class MyAudio { AudioEngine ae; // 音效引擎 WaveBank wb; // Wave 檔案倉庫 (Wave Bank) SoundBank sb; // 聲音倉庫 (Sound Bank) public MyAudio() // constructor { //讀入Content中的檔案 ae = new AudioEngine("Content\\MyAudio.xgs"); wb = new WaveBank(ae, "Content\\Wave Bank.xwb"); sb = new SoundBank(ae, "Content\\Sound Bank.xsb"); } //播放音效 public void PlaySound(string name) { sb.PlayCue(name); } } }

XNA 程式的聲音物件和XACT 專案檔案關係圖

SoundBank物件和Cue物件關係圖

7.3 範例一:實作一個音效類別 //Game1.cs namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game { ………. MyAudio audio; // 音效類別 public Game1() { ….. audio = new MyAudio(); // 建立audio } …………………..

7.3 範例一:實作一個音效類別 //Game1.cs protected override void Update(GameTime gameTime) { ........ if (mySprite1.Collides(mySprite2)) { Vector2 tempVelocity = mySprite1.velocity; mySprite1.velocity = mySprite2.velocity; mySprite2.velocity = tempVelocity; audio.PlaySound(“chimes”);//圖片在碰撞時產生音效 } base.Update(gameTime);

7.4 範例二:背景音樂 //MyAudio.cs using Microsoft.Xna.Framework.Audio; namespace WindowsGame1 { class MyAudio { AudioEngine ae; // AudioEngine WaveBank wb; // MyAudio.xap 內的WaveBank SoundBank sb; // MyAudio.xap 內的SoundBank Cue bgm; // 背景音樂 public MyAudio() { //讀入Content中的檔案 ae = new AudioEngine("Content\\MyAudio.xgs"); wb = new WaveBank(ae, "Content\\Wave Bank.xwb"); sb = new SoundBank(ae, "Content\\Sound Bank.xsb"); bgm = sb.GetCue("BGM"); //讀入BGM.wav } ……..

7.4 範例二:背景音樂 //MyAudio.cs // functional member public void PlaySound(string name) //播放音效 { sb.PlayCue(name); } public void PauseBGM() //暫停背景音樂 { if (bgm.IsPlaying) bgm.Pause(); } public void ResumeBGM() { if (bgm.IsPaused) bgm.Resume(); } //背景音樂恢復播放 public void PlayBgm() //播放背景音樂 { if (!bgm.IsPlaying) { bgm = sb.GetCue(bgm.Name); bgm.Play(); } } public bool IsBgmPause() //背景音樂是否暫停 { return bgm.IsPaused; } // 背景音樂更新 public void Update() { if (bgm.IsStopped) PlayBgm(); ae.Update();

7.4 範例二:背景音樂 //MyAudio.cs // functional member public void Update() // 背景音樂更新 { if (bgm.IsStopped) { PlayBgm(); ae.Update(); } }

Cue類別重要的定義(Figure in P7-16) public sealed class Cue : IDisposable { // 是否暫停 public bool IsPaused { get; } // 是否正在播放 public bool IsPlaying { get; } // 是否停止播放 public bool IsStopped { get; } // 是否正在停止播放 public bool IsStopping { get; } // 3D 音效 根據傾聽者和發送器 調整 Cue 的值 public void Apply3D(AudioListener listener, AudioEmitter emitter); // 暫停播放 public void Pause(); // 播放 public void Play(); // 恢復播放 public void Resume(); // 停止播放 public void Stop(AudioStopOptions options); }

7.4 範例二:背景音樂 //Game1.cs namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game {…………. MyAudio audio; // 音效類別 public Game1() {…….. audio = new MyAudio(); // 建立audio audio.PlayBgm();// 播放背景音樂 } ……

7.4 範例二:背景音樂 //Game1.cs namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game {…………. protected override void Update(GameTime gameTime) {………… if (mySprite1.Collides(mySprite2)) { Vector2 tempVelocity = mySprite1.velocity; mySprite1.velocity = mySprite2.velocity; mySprite2.velocity = tempVelocity; audio.PlaySound(“chimes”);//圖片在碰撞時產生音效 } audio.Update(); //背景音樂 ……..

7.4 範例二:背景音樂 //Game1.cs namespace WindowsGame1 { public class Game1 : Microsoft.Xna.Framework.Game {…………. protected override void Update(GameTime gameTime) {………… //Keyboard輸入 KeyboardState newState; // 宣告一個KeyboardState 結構的變數 newState = Keyboard.GetState(); //得到目前鍵盤每一個按鍵的狀況 if (oldState.IsKeyUp(Keys.Space) && newState.IsKeyDown(Keys.Space)) //判斷Space鍵是否已經被按 { if (audio.IsBgmPause()) audio.ResumeBGM(); else audio.PauseBGM(); } oldState = newState; base.Update(gameTime); } } }

簡易的聲音播放 新版的XNA 3.0 因為增加了Zune機台遊戲的開發,而Zune機台並不支援XACT音效專案相關檔案,所以也提供了簡單的音樂音效播放方式。

SoundEffect 類別 public sealed class SoundEffect : IDisposable { // 得到或設定聲音的遠近距離 (會影響doppler的運算) public static float DistanceScale { get; set; } // 得到或設定doppler運算的參數 public static float DopplerScale { get; set; } // 得到聲音的播放時間 public TimeSpan Duration { get; } // 得到或設定聲音的主音量 (會影響全部 SoundEffectInstance 的音量) // 其有效值為 0.0f (靜音) 到 1.0f public static float MasterVolume { get; set; } // 得到或設定聲音的速度 (內定是 每秒 343.5 公尺) public static float SpeedOfSound { get; set; } // 產生一個 SoundEffectInstance 物件 並且播放 public SoundEffectInstance Play(); // 同時設定聲音的主音量 有效值為 0.0f (靜音) 到 1.0f public SoundEffectInstance Play(float volume);

SoundEffect 類別 // 產生一個 SoundEffectInstance 物件 並且播放 // 同時設定聲音是否重複播放 有效值為 true、false public SoundEffectInstance Play(float volume, float pitch, float pan, bool loop); // 產生一個 SoundEffectInstance 物件 並且播放 3D 聲音 // 同時設定聲音的傾聽者 AudioListener 和 放音者 AudioEmitter // 使用預設的音量和音高 public SoundEffectInstance Play3D(AudioListener listener, AudioEmitter emitter); // 同時設定聲音的音量、音高和是否重複播放 public SoundEffectInstance Play3D(AudioListener listener, AudioEmitter emitter, float volume, float pitch, bool loop); // 同時設定聲音的多組傾聽者 AudioListener 和 放音者 public SoundEffectInstance Play3D(AudioListener[] listeners, AudioEmitter emitter, }

使用SoundEffect播放音效 SoundEffect soundEffect; // 一個SoundEffect物件 soundEffect = Content.Load<SoundEffect>("chimes"); soundEffect.Play();

使用SoundEffectInstance播放音效 SoundEffect soundEffect; SoundEffectInstance soundEffectInstance2; soundEffect = Content.Load<SoundEffect>("chimes"); soundEffectInstance = soundEffect.Play(); // 得到一個SoundEffectInstance 物件 soundEffectInstance.Stop(); // 播放 soundEffectInstance.Play(); // 停止播放

The End