Top Banner
XNA Game Studio 3.0 Suphot Sawattiwong [email protected]
98

XNA Game Studio 3.0

Jan 02, 2016

Download

Documents

Jade Robbins

XNA Game Studio 3.0. Suphot Sawattiwong [email protected]. XNA Game Studio 3.0. XNA Game Studio เป็น Framework ที่ใช้สำหรับพัฒนาเกมลงบนผลิตภัณฑ์ ของ Microsoft โดยในปัจจุบัน XNA GS3.0 นั้นสามารถพัฒนาเกมลงบน PC, XBOX360 และ Zune ได้. XNA Game Studio 3.0. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: XNA Game Studio 3.0

XNA Game Studio 3.0

Suphot Sawattiwong [email protected]

Page 2: XNA Game Studio 3.0

XNA Game Studio 3.0

• XNA Game Studio เป็�น Framework ที่��ใช้�สำ �หรั�บพั�ฒน�เกมลงบนผล�ตภั�ณฑ์� ของ Microsoft

• โดยในป็%จจ'บ�น XNA GS3.0 น�(นสำ�ม�รัถพั�ฒน�เกมลงบน PC, XBOX360 และ Zune ได�

Page 3: XNA Game Studio 3.0

XNA Game Studio 3.0

• แหล-งคว�มรั0 �เก��ยวก�บ XNA Game Studio 3.0–www.creators.xna.com–http://www.thaixna.com/–http://www.xnanoob.com/

• สำ�ม�รัถ download XNA GS 3.0 ได�จ�ก http://creators.xna.com/en-US/downloads

Page 4: XNA Game Studio 3.0

คว�มต�องก�รัรัะบบของ XNA GS 3.0

• ก�รัรั�นเกมที่��ใช้� XNA Framework จ �เป็�นต�องม�ก�รั�ดจอที่��สำน�บสำน'น Shader Model 1.1 แต-ควรัสำน�บสำน'น Shader Model 2.0 จะด�กว-�

• ต�องม� Windows XP Service Pack 2 ข1(นไป็• ต�องม� DirectX 9.0c• ต�องม��นใจว-� Driver ก�รั�ดจอของเรั�อย0-ใน Version ล-�สำ'ด• ต�องม� Visual Studio 2008 เป็�นอย-�งต �� ในก�รัอบรัมครั�(ง

น�( เรั�จะใช้� Visual Studio Express 2008 เที่-�น�(น• ต�องก�รั .Net Framework 3.5• เครั2�องม2อที่��ใช้�ต�วตรัวจสำอบว-�เครั2�องสำ�ม�รัถรั�น XNA ได�

หรั2อไม- อย0-ใน DVD (XNA 3\Utilities\ต�วตรัวจสำอบ XNA)

Page 5: XNA Game Studio 3.0

ข�(นตอนก�รัต�ดต�(ง XNA GS 3.0

• ก-อนอ2�นให�ที่ �ก�รัยกเล�กก�รัต�ดต�(ง Visual Studio 2005 และ XNA GS 2.0 ออกจ�กเครั2�อง (ถ��ม�)

• ที่ �ก�รัต�ดต�(ง Visual C# 2008 Express Edition ในแผ-น DVD หรั2อ download จ�ก http://www.microsoft.com/express/download/default.aspx

• ที่ �ก�รัต�ดต�(ง DirectX Runtime• ที่ �ก�รัต�ดต�(ง XNA Game Studio 3.0

Page 6: XNA Game Studio 3.0

MyFirstGame

• ก-อนอ2�นให�ที่ �ก�รัเป็3ด Visual C# Express 2008• กดเล2อก New Project• ที่ �ก�รัเล2อก Windows Game (3.0)• ต�(งช้2�อ Project ว-� MyFirstGame กด ok จนกว-�จะ

เสำรั4จ

Page 7: XNA Game Studio 3.0

MyFirstGame

• หล�งจ�กเสำรั4จแล�ว ให�กด F5 เพั2�อที่ �ก�รัรั�นเกม

Page 8: XNA Game Studio 3.0

Method ใน XNA

• เรั�ม�เรั��มจ�ก Class Game ในไฟล� game1.cs ก�นก-อน จะเห4นได�ว-� Method หล�ก ใน XNA ม�ด�งต-อไป็น�(

Method ใช้�สำ��หรับ

Initialize() Method ที่��ใช้�ก �หนดค-�เบ2(องต�นในเกม ที่ �ก�รั Run เม2�อ game.Run(); ใน programe.cs ที่ �ง�น

LoadContent() Method ที่��ใช้�เพั2�อ Load Content ที่��ใช้�ในเกม

UnloadContent() Method ที่��ใช้�ในก�รัลบContent ต-�งๆออก

Update(GameTime gameTime) Method ที่��ใช้�ในก�รั update สำ-วนเง2�อนไขของเกม และก�รัรั�บข�อม0ล Input

Draw(GameTimetime) Method ที่��ใช้�ในก�รัแสำดงผลของเกม

Page 9: XNA Game Studio 3.0

XNA Game Loop

Page 10: XNA Game Studio 3.0

XNA Game Loop

• เป็3ด Project ที่��ช้2�อ XNAGameLoop แล�วลองรั�นด0ว-�ผลล�พัธ์�เป็�นอย-�งไรั

Page 11: XNA Game Studio 3.0

ก�รัช้�(ว�ดป็รัะสำ�ที่ธ์�ภั�พัของเครั2�อง• สำ��งที่��เรั�ใช้�ช้�(ว�ดป็รัะสำ�ที่ธ์�ภั�พัก�รัว�ดของเครั2�อง

น�(นๆ ม�หล�ยว�ธ์�ที่��เรั�จะว�ดได� โดยว�ธ์�ที่��ใช้�ง-�ยสำ'ดเห4นจะหน�ไม-พั�น Frames Per Second หรั2อ FPS

• FPS เป็�นก�รัว�ดใน 1 ว�น�ที่� เรั�ที่ �ก�รัเข��ใช้�ก�รัว�ดไป็ที่�(งหมดก��ครั�(ง

• เป็3ด Project ที่��ช้2�อว-� FPSTest

Page 12: XNA Game Studio 3.0

2D Basic Programming for XNA

Suphot Sawattiwong [email protected]

Page 13: XNA Game Studio 3.0

Display Resolution

• Display Resolution เป็�นเรั2�องที่��ต�องที่ �คว�มเข��ใจก�นก-อน โดยป็กต� Resolution ของ PC จะข1(นอย0-ก�บ Computer ที่��ใช้� โดยม�ตรัฐ�นป็%จจ'บ�น อย0-ที่�� 1024x768 แต-ถ��ห�กเป็�น Wide Screen ก4จะม�จ'ดที่��แตกต-�งก�นออกไป็ต�ม ratio ที่��เป็ล��ยนไป็

• สำ �หรั�บ XBOX360 เน2�องจ�กเครั2�องเกมได�ถ0กใช้�ม�ตรัฐ�น HD(High Definition) ซึ่1�งจะม�ต�(งแต- 480i, 480p, 720i,720p จนถ1ง 1080i

• ก�รัที่��เรั�ที่ �เกมเรั�อ�จจะต�องรัะว�งเรั2�อง Resolution ไว�ด�วยเช้-นก�น

Page 14: XNA Game Studio 3.0

คว�มกว��งxย�วของจอภั�พัใน XNA• คว�มกว��งย�วของจอภั�พั แบ-งเป็�น 3 ล�กษณะด�งน�(

– Display Mode เป็�นขอบเขตของหน��จอของรัะบบ ซึ่1�งแตกต-�งก�บหน��จอ

หน��ต-�งของเกม– Back Buffer เป็�นขอบเขตเฉพั�ะในก�รัแสำดงผล ซึ่1�งใช้�ในก�รั

ค �นวณ next render โดยใน Windows Back Buffer จะม�ค-�เด�ยวก�บหน��จอของเกม แต-สำ �หรั�บใน XBOX360 ถ0กสำรั��งต�ม User ก �หนด และเม2�อ Fullscreen Mode บน Windows Back Buffer จะเป็�นไป็ต�ม Display Modeที่�นที่�

– ViewPort เป็�นหน��จอที่��ใช้�แสำดงผล เป็�นล�กษณะของกล�อง ซึ่1�งคว�มกว��ง และ คว�มย�ว เป็�นคว�มกว��งคว�มย�วของกล�องด�วยเช้-นก�น โดย viewport ไม-ม�คว�มเก��ยวข�องก�บ ขน�ดของ Game Windows แต- viewport สำ�มพั�นธ์�ก�บค-� Display Mode

Page 15: XNA Game Studio 3.0

คว�มกว��งxย�วของจอภั�พัใน XNA

Page 16: XNA Game Studio 3.0

ก�รัที่ �ง�นก�บ GraphicsDevice ใน XNA

• ก�รัต�(งค-�หน��จอ Windowsgraphics.PreferredBackBufferWidth = <คว�มกว��ง>;graphics.PreferredBackBufferHeight = <คว�มย�ว>;

• ก�รัที่ �ให� Windows เป็�น โหมด Full Screengraphics.IsFullScreen = <true|false>;

• ก�รัสำล�บโหมด Windows จ�ก Windows เป็�น Full Screen หรั2อ Full Screen เป็�น Windows Modegraphics.ToggleFullScreen();

• ด0ต�วอย-�งใน Project ScreenWidthHeight

Page 17: XNA Game Studio 3.0

GameComponent ใน XNA

• ใน XNA ม�ก�รัสำรั��ง Component เพั2�อเรั�ยกใช้�ในเกม ใน Class Game Component โดยใน Class ด�งกล-�วม�โครังสำรั��งในก�รัแยก logic ในก�รัใช้�ง�นออกจ�กต�ว Class Game หล�กได� และสำ�ม�รัถเพั��ม class GameComponent ใสำ-ไว�ใน project อ2�นๆ ได�ด�วยเช้-นก�น

• แต- GameComponent ม�แค- Method Update เที่-�น�(น ห�กต�องก�รัให�ม�ก�รัควบค'มก�รั Draw ด�วยให�ใช้� DrawableGameComponent

Page 18: XNA Game Studio 3.0

DrawableGameComponent

• จ�กก-อนหน��น�( ได�ม�ก�รัใช้�ว�ธ์�ค �นวณ fps ตอนน�(ม�ที่ � fps DrawableGameComponent ข1(นม�

• เรั��มแรักสำรั��ง Project ที่��ช้2�อ FPSDrawable• กด Add New Item โดยก�รั click ขว� ใน

Solution Explorer• เล2อก GameComponent แล�วต�(งช้2�อว-� FPS

Page 19: XNA Game Studio 3.0

ต�วอย-�งก�รัเป็ล��ยน GameComponent เป็�น DrawableGameComponent

public class FPS : Microsoft.Xna.Framework.GameComponent

จ�ก

เป็�นpublic class FPS : Microsoft.Xna.Framework.DrawableGameComponent

ให�ด0ใน Project ที่��ช้2�อว-� FPSDrawable

Page 20: XNA Game Studio 3.0

ต�วอย-�งก�รั add GameComponent ลงใน Game1.cs

• ป็รัะก�ศต�วแป็รั ที่��เป็�นช้2�อของ GameComponent น�(น เช้-นในที่��น�( private FPS fps;

เพั��ม code ในสำ-วนของ Initialize หรั2อ Method ที่��เหม�ะสำมแล�วแต-กรัณ� ให�ม�ก�รัเรั�ยก instance แล�วที่ �ก�รั add เข��ไป็

เช้-นfps = new FPS(this, true, true,

this.TargetElapsedTime);Components.Add(fps);

Page 21: XNA Game Studio 3.0

Resouce ที่��ใช้�ในเกม

• File รั0ป็ภั�พั ใน XNA สำ�ม�รัถอน'ญ�ตให�ใช้�รั0ป็ภั�พัเป็�น jpg, gif, และ png ก4ได� โดยป็กต� เพั2�อคว�มสำะดวกเรั�จะใช้� format pngในก�รัที่�ภั�พัในเกม เน2�องจ�กว-�สำะดวกในก�รัเจ�ะ Transparent

• Sound ที่��ใช้� Support ม� wav, aifและaiffแต-ห�กจะน�ม�ใช้�ต�องผ-�น tools ที่��ช้2�อว-� Microsoft Cross-Platform Audio Creation Tool (XACT)

Page 22: XNA Game Studio 3.0

Content Pipeline• โดยป็กต� Game Resource จะถ0ก Load เก4บม�ไว�ใน

memory ก-อนที่��จะที่ �ก�รัใช้�ง�น โดยที่�� Content Pipeline จะเป็�นต�วช้-วยในก�รั load เข��ม� ซึ่1�งเป็�นก�รัน � File ที่��ม�ค'ณสำมบ�ต�ต-�งก�น ไม-ว-�จะเป็�น รั0ป็ภั�พั หรั2อว-�เสำ�ยงจะถ0กเก4บใน format ที่��ง-�ยต-อก�รัโหลดเพั2�อม�ใช้�ในเกมเม2�อเกม start

• ข�(นแรักรั0 �จ�กต�วแป็รั ที่��ช้2�อ “Content” ใน Content.RootDirectory = "Content";

• เป็�นต�วแป็รัที่�� XNA ก �หนดม�ใน Class game ของ XNA เพั2�อให�สำะดวกต-อก�รัใช้�ง�น

• Content.RootDirectory เป็�นก�รับอกว-� Folder ที่�� Content อย0-น� (น อย0-ใน Folder “Content” น��นเอง

Page 23: XNA Game Studio 3.0

ก�รัน �ภั�พัเข�� Project

• Click ที่�� Folder Content ใน Solution Explorer• เล2อก Add>Add Exist Item แล�วไป็ย�ง Folder ที่��

เรั� Save ไฟล� ภั�พัไว� (ในแผ-น DVD Folder “Resource Example”) Fileภั�พัจะถ0ก copy เข��ม�ไว�ใน Content ที่�นที่�

Page 24: XNA Game Studio 3.0

ก�รัว�ดภั�พัใน XNA

• ก-อนอ2�นม�ที่ �คว�มเข��ใจของค �ว-� Sprite ค2อรั0ป็ภั�พัน��นเอง XNA ที่ �ก�รัอ��งถ1งรั0ป็ภั�พัผ-�นที่�ง Texture2D Object ซึ่1�งเรั�จะที่ �ก�รัว�ดภั�พัเหล-�น�(ลงบนหน��จอโดยตรัง

• ก�รัว�ดภั�พัใน XNA ต�องที่ �คว�มรั0 �จ�กก�บรัะบบ 2D Coordinate เสำ�ยก-อน เพั2�อเข��ใจในต �แหน-งก�รัว�งภั�พัแบบ 2D

• โดยในโลกของ 2D จะม�แค- แกน x,y เที่-�น�(น ซึ่1�งต-�งจ�ก 3D ที่��ใช้� x, y, และ z

• origin ของ XNA อย0-บนซึ่��ยสำ'ดของหน��จอ (0,0) ค2อ x= 0 และ y= 0

Page 25: XNA Game Studio 3.0

จอภั�พั

x+

Origin(0,0)

y+

2D Coordinate System

Page 26: XNA Game Studio 3.0

2D Coordinate System

• จะเห4นได�ว-� ห�กหน��จอม� Resolution 1024x768 จ'ดจะเรั��มจ�ก 0-1023 ในแนวแกน x และ 0-767 ในแนวแกน y และม'มขว�ล-�งสำ'ดจะม�จ'ด (1023, 767)

• ซึ่1�งใน XNA จะเก4บค-�ต �แหน-งเหล-�น�(ในต�วแป็รั Vector2 และต�วแป็รัแกน xและ y ในรั0ป็แบบ int

Page 27: XNA Game Studio 3.0

จอภั�พั Origin(0,0)

Vector(100,60) y-offset=60 Position(100,60)

x-offset=100

ต�วอย-�งก�รัว�ดภั�พัในต �แหน-งที่�� (100,60)

Page 28: XNA Game Studio 3.0

2D Transformation

• ในโลก 2D น�(นนอกจ�กต �แหน-งของภั�พัแล�ว ย�งสำ�ม�รัถที่ �ก�รัย��ยต �แหน-งของภั�พัได� รัวมถ1ง ย-อ/ขย�ย และ หม'นภั�พัได� สำ��งเหล-�น�(เรั�ยกรัวมๆ ว-� “2D Transformation”

Page 29: XNA Game Studio 3.0

ห�กต�องก�รัเล2�อนจ�กจ'ดเด�มไป็อ�ก 120, 40 จ'ด

Page 30: XNA Game Studio 3.0

ก�รัหม'น (Rotate)

• ใน XNA ม�ก�รัสำรั��งจ'ด Origin ของ Sprite เพั2�ออ �นวย

คว�มสำะดวกใน Rotate ห�กเรั�ใช้�จ'ดเด�มในก�รัหม'นจะออกม�เป็�น

แบบน�(

Page 31: XNA Game Studio 3.0

ก�รัใช้�จ'ดOrigin ของ Sprite เพั2�อใช้�ในก�รัหม'น

• ใน XNA สำ�ม�รัถก �หนดจ'ด Origin ของ Sprite ได�ว-�ต�องก�รัให�อย0-ในจ'ดใดของภั�พัเพั2�อสำะดวกในก�รัหม'น

Page 32: XNA Game Studio 3.0

ก�รัย-อ/ขย�ย(scale)

• ก�รัที่ �ให� Sprite ม�ขน�ดใหญ-ข1(นในก�รัว�ด ซึ่1�งใช้�จ'ด origin ในก�รัขย�ยเช้-นก�น

Page 33: XNA Game Studio 3.0

Vector2

• Vector2 เป็�นต�วแป็รัที่��เก4บค-� 2 ต�ว เรั�ม�กใช้�ก�บก�รัเก4บต �แหน-ง ม�

parameter ด�งต-อไป็น�(

Vector2 <ช้2�อต�วแป็รั> = new Vector2(<จ'ดPosition X>, <จ'ด Position Y>);

Page 34: XNA Game Studio 3.0

Rectangle

• เป็�นต�วแป็รัที่��เก4บขน�ด สำ��เหล��ยม โดยม� parameter ใน Constructor ด�งน�(

Rectangle <ช้2�อต�วแป็รั> = new Rectangle(<จ'ดPosition X>, <จ'ด Position Y>,<กว��ง>,<สำ0ง>);

Page 35: XNA Game Studio 3.0

SpriteBatch

• ในเกมในป็%จจ'บ�นม�ก�รัใช้�รั0ป็ภั�พัหล�ยรั0ป็ในหล�ยๆ ต �แหน-งของหน��จอ ม�นเป็�นเรั2�องที่��ย'-งย�กในก�รัสำ-งผ-�นข�อม0ลของต �แหน-งและจ�ดก�รัภั�พัเหล-�น�(ให�ม�ป็รัะสำ�ที่ธ์�ภั�พั

• โดย XNA ม� Class พั�เศษสำ �หรั�บจ�ดก�รัน�(โดยตรังน��นค2อ SpriteBatch• ก �หนด SpriteBatch ไว�ใน Class Game ด�งน�( <private|public> SpriteBatch <ช้2�อต�วแป็รั>; เช้-น private SpriteBatch spriteBatch;• ว�งใน LoadContent ก4ได� ให�ใสำ-ก�รัก �หนดค-�ลงไป็ด�งน�(

<ช้2�อต�วแป็รั> = new SpriteBatch(<ต�วแป็รัGraphics>.GraphicsDevice);เช้-น spriteBatch = new SpriteBatch(GraphicsDevice);

Page 36: XNA Game Studio 3.0

SpriteBatch

• ก�รัที่ �ง�นของ Method SpriteBatch ในสำ-วนก�รั Draw ใน

Draw Method น�(นแบ-งเป็�นหล�ย Method ด�งน�(– Begin() เป็�นก�รับอกจ'ดเรั��มต�นของ SpriteBatch และ

ย�งม�ก�รั set ค-�ต-�งๆ เช้-น SpriteBlendMode, SpriteSortMode

– Draw() ไว�สำ �หรั�บ Draw ภั�พัป็กต�โดยใช้� Texture2D– DrawString() ไว�สำ �หรั�บ Draw ข�อคว�มที่��ใช้�ในเกม – End() เป็�นก�รับอกจ'ดสำ�(นสำ'ดของ SpriteBatch

Page 37: XNA Game Studio 3.0

ก�รั Draw ใน SpriteBatch

Method คำ��อธิ�บ�ยDraw(Texture2D, Rectangle, Color)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Rectangle และสำ�ที่��ใช้�

Draw(Texture2D, Rectangle, Nullable<Rectangle>, Color)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��ภั�พั ในรั0ป็แบบ Rectangle, ต �แหน-งของภั�พัที่��น �ม�ว�ดเป็�นต�วเล2อกในรั0ป็แบบ Rectangle และสำ�ที่��ใช้�

Page 38: XNA Game Studio 3.0

ก�รั Draw ใน SpriteBatch

Method คำ��อธิ�บ�ยDraw(Texture2D, Rectangle, Nullable<Rectangle>, Color, float, Vector2, SpriteEffects, float)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��ภั�พั ในรั0ป็แบบ Rectangle,ต �แหน-งของภั�พัที่��น �ม�ว�ด เป็�นต�วเล2อกในรั0ป็แบบ Rectangle, สำ�ที่��ใช้�, ค-�สำ �หรั�บก�รัหม'น, ต �แหน-ง origin ใหม-, Sprite Effects, และค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง

Page 39: XNA Game Studio 3.0

ก�รั Draw ใน SpriteBatchMethod คำ��อธิ�บ�ยDraw(Texture2D, Vector2, Color)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Vector2 และสำ�ที่��ใช้�

Draw (Texture2D, Vector2, Nullable<Rectangle>, Color)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Vector2, ต �แหน-งของภั�พัที่��น �ม�ว�ด เป็�นต�วเล2อกและสำ�ที่��ใช้�

Page 40: XNA Game Studio 3.0

ก�รั Draw ใน SpriteBatchMethod คำ��อธิ�บ�ยDraw (Texture2D, Vector2, Nullable<Rectangle>, Color, float, Vector2, float, SpriteEffects, float)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��ว�งเป็�น Vector2, ต �แหน-งและขน�ดของภั�พัที่��ว�ดเป็�นต�วเล2อก, สำ�ที่��ใช้�, ก�รัหม'น, จ'ดorigin,ค-�ย-อขย�ยเป็�นSingle, sprite effect และค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง

Draw (Texture2D, Vector2, Nullable<Rectangle>, Color, float, Vector2, Vector2, SpriteEffects, float)

ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Vector2,ต �แหน-งของภั�พัที่��น �ม�ว�ดเป็�นต�วเล2อกในรั0ป็แบบ Rectangle, สำ�ที่��ใช้�, ก�รัหม'น, จ'ดorigin,ค-�ย-อขย�ยเป็�น Vector2, sprite effects, และ ค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง

Page 41: XNA Game Studio 3.0

SpriteEffects

• เป็�น Effects ของ Sprite ที่��ที่ �ได�ในค �สำ��ง Draw ม�ด�งต-อไป็น�(

– SpriteEffects.FlipHorizontally ไว�พัล�กด��นแนวนอน– SpriteEffects.FlipVertically ไว�พัล�กด��นแนวต�(ง– SpriteEffects.None ไม-ม� Effect

Page 42: XNA Game Studio 3.0

ต�วอย-�งก�รัว�ดภั�พัBackground

• สำรั��ง Project ช้2�อ DrawBackground ข1(นม�• น �ภั�พั Background ใดก4ได�ไป็ใสำ-ใน โดยที่ �ต�มว�ธ์�

ก�รัน �ไฟล�เข�� Project• พั�มพั� Code ในสำ-วนต-อไป็น�( ป็รัะก�ศต�วแป็รัใน

Class Game1 ด�งต-อไป็น�(GraphicsDeviceManager graphics;SpriteBatch spriteBatch;Rectangle bgRect; //เป็�นก�รัป็รัะก�ศต�วแป็รัที่��เก4บต �แหน-งและขน�ดของ BackgroundTexture2D bgTexture; //ต�วแป็รัภั�พัที่��เรั�ใช้�เป็�นพั2(นหล�ง

Page 43: XNA Game Studio 3.0

ใน Constructor Game1

public Game1(){ graphics = new GraphicsDeviceManager(this); graphics.PreferredBackBufferWidth = 1024; // เป็�นก�รัก �หนดคว�มกว��งของหน��จอ graphics.PreferredBackBufferHeight = 768; // เป็�นก�รัก �หนดคว�มย�วของหน��จอ Content.RootDirectory = "Content";}

Page 44: XNA Game Studio 3.0

ใน Method Initializeprotected override void Initialize(){ bgRect = new Rectangle(0, 0,

graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height);//graphics.GraphicsDevice.Viewport.Width เป็�นค-�คว�มกว��งของ ViewPort หรั2อหน��จอ//graphics.GraphicsDevice.Viewport.Height เป็�นค-�คว�มย�วของ ViewPort หรั2อหน��จอ base.Initialize();}

Page 45: XNA Game Studio 3.0

ใน Method LoadContent

protected override void LoadContent(){ // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); bgTexture = Content.Load<Texture2D>("Matching_bg"); //ก�รัเรั�ยกใช้� Background}

Page 46: XNA Game Studio 3.0

ใน Method Draw

protected override void Draw(GameTime gameTime){

GraphicsDevice.Clear(Color.CornflowerBlue); //ก�รัเต�มสำ� Background spriteBatch.Begin(); // เรั��มก�รัใช้� spriteBatch spriteBatch.Draw(bgTexture, bgRect, Color.White); // ที่ �ก�รัว�ดรั0ป็ Background spriteBatch.End(); // จบก�รัใช้� spriteBatch base.Draw(gameTime);}

Page 47: XNA Game Studio 3.0

ก�รัใช้� SpriteFont ในXNA• ใน XNA ม�ว�ธ์�ก�รัแนบ Font จ�ก Windows เข��ม�ในเกมได�เลย

โดยสำ�ม�รัถใช้� TrueType Font ในเกม• ก�รั Add SpriteFont เข��ม�ย�ง project ก-อนม�ข�(นตอนด�งน�(– Click ขว�ที่�� Folder Content ใน Solution Explorer – เล2อกที่��Add> Add New Item เล2อก SpriteFont แล�วต�(งช้2�อให�ตรัง

ก�บfont แต-ไม-ควรัม� space แล�วต�มด�วย Size เช้-น Angsana14– จ�กน�(นให�เป็3ด sprite font แล�วด0ที่��บรัรัที่�ดตรังที่��เข�ยนว-�<FontName>

<FontName>ช้2�อFont</FontName>เช้-น <FontName>AngsanaUPC</FontName>– จ�กน�(น ให�ด0 บรัรัที่�ด <Size>ขน�ด</Size> แก�ขน�ดต�มต�องก�รั

Page 48: XNA Game Studio 3.0

ก�รัใช้� SpriteFont ในXNA• สำรั��งต�วแป็รั SpriteFont ไว�ใน Class Game1

ด�งน�(private SpriteFont font;

• ให�ใสำ- Code ลงใน Method LoadContentfont = Content.Load<SpriteFont>(@"AngsanaUPC14");

Page 49: XNA Game Studio 3.0

DrawString

Method คำ��อธิ�บ�ยDrawString (SpriteFont, String, Vector2, Color)

ก�รัว�ดโดยรัะบ' Sprite Font, ข�อคว�มที่��แสำดง, Vector2 สำ �หรั�บต �แหน-ง และสำ�ของ Font

DrawString(SpriteFont, String, Vector2, Color, float, Vector2, float, SpriteEffects, float)

ก�รัว�ดโดยรัะบ' Sprite Font, ข�อคว�มที่��แสำดง, Vector2 สำ �หรั�บต �แหน-ง, สำ�ของ Font, ก�รัหม'น , จ'ด origin, ค-�ย-อขย�ยเป็�น float, Sprite Effect และ ค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง

Page 50: XNA Game Studio 3.0

DrawString

Method คำ��อธิ�บ�ยDrawString(SpriteFont, String, Vector2, Color, float, Vector2, Vector2, SpriteEffects, float)

ก�รัว�ดโดยรัะบ' Sprite Font, ข�อคว�มที่��จะแสำดง, Vector2 สำ �หรั�บต �แหน-ง, สำ�ของ Font, ก�รัหม'น , จ'ด Origin, ค-�ย-อขย�ยเป็�น Vector2, Sprite Effect และ ค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง

Page 51: XNA Game Studio 3.0

ก�รัใช้�ภั�ษ�ไที่ยใน XNA

• ห�กต�องก�รัใช้�ภั�ษ�ไที่ยให�เพั��มข�อคว�มในกรัอบเหล-�น�(ลงไป็ในไฟล�ของ SpriteFont เพั2�อเป็�นก�รัเพั��มช้-วงของภั�ษ�ไที่ยลงไป็ <CharacterRegions>

<CharacterRegion> <Start>&#32;</Start> <End>&#126;</End> </CharacterRegion>

</CharacterRegions>

<CharacterRegion> <Start>&#3584;</Start> <End>&#3711;</End> </CharacterRegion>

Page 52: XNA Game Studio 3.0

ต�วอย-�งก�รัว�ด Font

• ให�เป็3ด Project ที่��ช้2�อว-� AddNewFont ใน DVD เพั2�อที่ดสำอบก�รัว�ด Font

Page 53: XNA Game Studio 3.0

อ'ป็กรัณ�ควบค'มใน XNA

• ใน XNA ได�แบ-งอ'ป็กรัณ�ควบค'มเป็�นที่�(งหมด 3 ป็รัะเภัที่ ได�แก- Keyboard, Mouse, XBOX360 Controller

• โดยในที่��น�(ขอเน�นก�รัใช้�ง�น Keyboard ก�บ Mouse

Page 54: XNA Game Studio 3.0

ก�รัสำน�บสำน'นอ'ป็กรัณ�ควบค'มใน XNA

• จ�กต�รั�งเห4นได�ว-�ในเครั2�อง XBOX360 ไม-ม�ก�รัสำน�บสำน'น Mouse และ GamePad ที่��ใช้�ใน XNA ต�องเป็�น GamePad ที่��สำน�บสำน'น XBOX360 Controller เที่-�น�(น ไม-เช้-นน�(นจะใช้�ไม-ได�

Page 55: XNA Game Studio 3.0

Keyboard

• ใน XNA แบ-ง Keyboard ที่��ใช้�แบ-งเป็�น 2 ป็รัะเภัที่ ค2อ Keyboard ที่��วไป็ ก�บ ChatPad

Page 56: XNA Game Studio 3.0

Keyboard

• โดยที่��ก�รัที่ �ง�นหล�กของ Keyboard ใน XNA เน�นก�รัใช้�ง�น 2 Class หล�ก ได�แก- Keyboard และ KeyboardState

• โดยม� enums ไว�เรั�ยกอ��งอ�งค-�ป็'>มต-�งๆ ของ Keyboard ค2อ Keys

• ว�ธ์�ก�รัเรั�ยกใช้� Keyboard สำ�ม�รัถที่ �ได�โดยใน Method Update เช้-น

Page 57: XNA Game Studio 3.0

ต�วอย-�งก�รัเข�ยนควบค'ม Keyboard ใน XNA

protected override void Update(GameTime gameTime){

// ที่ดสำอบก�รัใช้� Keyboard โดยห�กกดป็'>ม Escape ให�ออกจ�กเกม if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { this.Exit(); } base.Update(gameTime);}

Page 58: XNA Game Studio 3.0

Keyboard

• สำ-วน KeyboardState เป็�นต�วที่��แสำดงสำถ�นะว-�ขณะน�( keyboard อย0-ในสำถ�นะ KeyDown หรั2อว-� KeyUp– KeyDown ค2อจ�งหวะที่��เรั�กดป็'>ม– KeyUp ค2อจ�งหวะที่��เรั�ป็ล-อยป็'>ม

Page 59: XNA Game Studio 3.0

ก�รัเอ�สำถ�นะของ Keyboard

• ช้'ดค �สำ��งก�รัน �สำถ�นะของ Keyboardไป็ใช้�ง�นสำ�ม�รัถที่ �ได�ผ-�นที่�งช้'ดค �สำ��ง Keyboard.GetState()

• ห�กใช้�ค �สำ��งด�งกล-�ว ที่ �ให�ได�ค-�ของ KeyboardState ม�เพั2�อพัรั�อมใช้�ง�นต-อไป็ โดยช้'ดค �สำ��ง Keyboard.GetState() ม�ก�รัเรั�ยกใช้�ได� 2 แบบด�งน�(

Page 60: XNA Game Studio 3.0

KeyboardState

• Method ของ KeyboardState ที่��จ �เป็�นต�องรั0 �

Page 61: XNA Game Studio 3.0

ต�วอย-�งของก�รัรั�บค-� KeyboardState

• ให�เป็3ดด0 Project ที่��ช้2�อว-� InputKeyboardState

Page 62: XNA Game Studio 3.0

Mouse

• ใน XNA น�(น Mouse เป็�น input ที่��สำ�ม�รัถใช้�ได�ใน platform Windows เที่-�น�(น (ไม-สำ�ม�รัถใช้�ได�ใน XBOX360) โดย ม� Class Mouse และ MouseState• โดย Mouse จะเป็�นต�วเช้2�อมต-อก�บ Hardware• โดยป็กต� Mouse Cursor ใน XNA ถ0กซึ่-อนไว�ห�กต�องก�รัให�

เห4น Mouse Cursor ต�องใช้�ค �สำ��งด�งต-อไป็น�(ใน Class Game1this.IsMouseVisible = true;

ด0ต�วอย-�งได�ใน Project ช้2�อว-� InputMouse

Page 63: XNA Game Studio 3.0

Mouse

• โดย MouseState เป็�นต�วแสำดงสำถ�นะต-�งๆ ของ mouse โดยสำ�ม�รัถก �หนดได�ด�งน�(

MouseState mouseState = Mouse.GetState();ต�วแป็รัใน MouseState ม�ด�งต-อไป็น�(

Page 64: XNA Game Studio 3.0

MouseState

Page 65: XNA Game Studio 3.0

MouseState

Page 66: XNA Game Studio 3.0

ButtonState

• Enum ButtonState จะเก4บ Event อย0- 2 แบบ ค2อ KeyPress และ Key Release โดยอ'ป็กรัณ�ควบค'มที่��ใช้� ได�แก-Mouse และ GamePad

Page 67: XNA Game Studio 3.0

ต�วอย-�งก�รั Click Mouse

• ให�เป็3ด Project MouseClick ข1(นม� แล�วรั�น เห4นได�ว-�ไม-ว-� click mouse ซึ่��ยตรังไหน ก4เป็�นป็'>มที่�(งหมด

• ซึ่1�งห�กที่ �เป็�นป็'>มกดจรั�งๆ ต�องรั0 �จ�กเรั2�องของก�รัช้นก�น หรั2อ Collision Detection ก-อน

Page 68: XNA Game Studio 3.0

Collision Detection

• ก�รัช้นก�นของว�ตถ' ในเกมเรั�จะว�ดค-�จ�กก�รัช้นได�โดยก�รัด0ว-� ว�ตถ' 2

อ�นได�ม�ก�รั ซึ่�อนที่�บก�นหรั2อไม-

• โดย Collision Detect จะเป็�นก�รัเช้4คว-�ว�ตถ' 2 ช้�(นน�(ซึ่�อนที่�บก�นหรั2อไม-

Page 69: XNA Game Studio 3.0

Collision Detection

• โดยจะเอ�ต �แหน-ง ของว�ตถ' คว�มกว��งย�วของว�ตถ'ม�ว�ดเป็�น

สำ��เหล��ยม

Page 70: XNA Game Studio 3.0

Collision Detection

• ช้'ดค �สำ��งในก�รัใช้�ได�โดยอ�ศ�ย Rectangle ในก�รัตรัวจสำอบเรั2�องก�รัช้นได�ด�งน�(

สำ��เหล��ยมอ�นที่�� 1.Intersects(สำ��เหล��ยมอ�นที่�� 2) เช้-น cursorRect.Intersects(playBtnRect) โดยค �สำ��งน�( ได�สำ-งค-� true ห�กเก�ดก�รัช้นก�น และ

false ห�กไม-ม�ก�รัช้นก�นเก�ดข1(น • สำ�ม�รัถด0ได�ใน Project MouseClick2

Page 71: XNA Game Studio 3.0

Sprite

• ใน XNA น�(น ใช้�ต�วแป็รั Texture2D ในก�รัเก4บรั0ป็ภั�พัที่��ใช้�ง�นแต-ห�กศ�พัที่�ที่��น�ยมใช้�ก�นที่��วไป็ในก�รัพั�ฒน�เกม อ�จจะเรั�ยกสำ��งเหล-�น�(ว-� “Sprite”

• โดยป็กต�ที่��ผ-�นม�ได�ม�ก�รัโหลดรั0ป็เพั2�อใช้�ในเกมโดย 1 ภั�พั เป็�นภั�พัที่��พัรั�อมใช้�ง�น แต-ห�กเกมม�เป็�น 100 ภั�พั ม�นก4เสำ�ยเวล�ที่��โหลด content น�นเก�นไป็

• ด�งน�(นเรั�จ1งม�ว�ธ์�ก�รัจ�ดภั�พัที่��ม�ล�กษณะก�รัใช้�ง�นเข��ด�วยก�นม�อย0-ในภั�พัเด�ยวก�น และเล2อกที่��จ�ดก�รัโดยก�รั Clip

Page 72: XNA Game Studio 3.0

ก�รั Clip ของ Sprite• ก�รั Clip เป็�นก�รัต�ดภั�พัออกม�เป็�นสำ-วนเพั2�อที่��ใช้�ง�นเฉพั�ะสำ-วน

น�(นๆได�

Rectangle(localX,localY,คว�มกว��งที่��ต�องก�รั, คว�มย�วที่��ต�องก�รั)

แล�วน �ไป็ใสำ-ใน Draw

Page 73: XNA Game Studio 3.0

ต�วอย-�งก�รั Clip

• ต�วอย-�งจ�กภั�พัก-อนหน��ห�ก clip ที่��กรัอบสำ�แดงของภั�พัต�องใช้�ค �สำ��งด�งน�(

spriteBatch.Draw(t2dSprite, new Vector(10, 20), new Rectangle(0, 0, 64, 64), Color.White);

Page 74: XNA Game Studio 3.0

ต�วอย-�งก�รั Clip

• ห�กต�องก�รั Clip ด�งภั�พัต�องเข�ยน code ด�งต-อไป็น�(spriteBatch.Draw(t2dSprite, new Vector(10, 20),

new Rectangle(10, 64, 64, 64), Color.White);• ให�ด0 Project ที่��ช้2�อว-� SpriteClip แล�วลองรั�นด0

Page 75: XNA Game Studio 3.0

Cel Animation หรั2อ Sprite Animation

• จ�กที่��รั0 �จ�กก�รัใช้� Clip แล�ว ต-อม�เป็�นก�รัเพั��มข�ดคว�มสำ�ม�รัถของ Clip ให�สำ0งข1(น โดยก�รันอกจ�กที่ �ก�รั Clip เป็�นช้�(นง�นแล�ว น �ม�ที่ �ก�รัต-อเน2�องเป็�น Animation ก�น ซึ่1�งสำ��งเหล-�น�(เรั�ยกว-� “Cel Animation”

Page 76: XNA Game Studio 3.0

ก�รัเพั��ม Library เข�� Project

• ให� click ขว� ต�มรั0ป็

• แล�วเล2อก add ไป็ที่�� Existing project ด�งภั�พั• เล2อก Folder Project Library ที่��ต�องก�รัแล�วกด

ok

Page 77: XNA Game Studio 3.0

ก�รัเพั��ม Library เข�� Project

• ให� click ขว� ต�มรั0ป็แล�วเล2อกadd Reference…

Page 78: XNA Game Studio 3.0

ก�รัเพั��ม Library เข�� Project

• เล2อก Library ที่��ต�องก�รั ต�มรั0ป็ แล�วกด ok

Page 79: XNA Game Studio 3.0

ก�รัเพั��ม Library เข�� Project

• จ�กน�(นให�ที่ �ก�รัพั�มพั�ข�อคว�มเพั2�อขอใช้� Library โดยก�รัพั�มพั� using ต�มด�วยช้2�อ NameSpace เช้-นusing PhotXNALibrary;

• จ�กน�(นสำ�ม�รัถใช้�ง�นได�ต�มป็กต�ต-อไป็ ลองด0ต�มต�วอย-�งต-อไป็ในเรั2�องของ SpriteAnimation

Page 80: XNA Game Studio 3.0

ช้'ดค �สำ��งในก�รัใช้�ง�น SpriteAnimationManager

• ก�รัป็รัะก�ศ Instance ที่ �ได�โดยม� parameter ด�งน�(ต�วแป็รั = new SpriteAnimationManager(Game game, string contentPath);

• โดยม� game เป็�นต�วที่��เรั�ยก Class game ที่��เป็�นต�วเรั�ยกใช้� sam

contentPath เป็�นที่��อย0-ของที่��เก4บภั�พัใน Folder Contentอ�กที่�

Page 81: XNA Game Studio 3.0

ช้'ดค �สำ��งในก�รัใช้�ง�น SpriteAnimationManager

• ก�รัป็รัะก�ศ Instance ที่ �ได�โดยม� parameter ด�งน�(ต�วแป็รั = new SpriteAnimationManager(Game game, string contentPath);

• โดยม� game เป็�นต�วที่��เรั�ยก Class game ที่��เป็�นต�วเรั�ยกใช้� sam

contentPath เป็�นที่��อย0-ของที่��เก4บภั�พัใน Folder Contentอ�กที่�

Page 82: XNA Game Studio 3.0

ก�รั AddAnimation

• ในSpriteAnimationManager ได�ม�ก�รั AddAnimation อย0-2 แบบด�วยก�นค2อ

• แบบที่�� 1

animationKey เป็�นช้2�อ Animation ที่��ต�องก�รัใช้� textureName เป็�นช้2�อไฟล� Texture SpriteCount เป็�น Struct ที่��สำ�ม�รัถเรั�ยกใช้�โดยใสำ-

จ �นวน frame ต-อแถว และใสำ-จ �นวนแถว เช้-น new SpriteCount(6, 3)

framesPerSecond เป็�น คว�มเรั4วในก�รัเคล2�อนที่��ของ Sprite หน-วยเป็�น fps

AddAnimation(string animationKey, string textureName, SpriteCount spriteCount, int framesPerSecond)

Page 83: XNA Game Studio 3.0

ก�รั AddAnimation• แบบที่�� 2

animationKey เป็�นช้2�อ Animation ที่��ต�องก�รัใช้� textureName เป็�นช้2�อไฟล� Texture SpriteRange เป็�น Struct ที่��สำ�ม�รัถเรั�ยกใช้�ได�โดยก�รัใสำ- จ'ดเรั��มต�น

ที่�(ง x,y ห�กจ'ดเรั��มต�นเป็�น 1,1 และต�มด�วยต �แหน-งที่��ยสำ'ดของช้-วงเช้-น 6,1 เช้-น new SpriteRange(1, 1, 6,1)spriteWidth ค2อคว�มกว��งของ spritespriteHeight ค2อคว�มย�วของ spritenumberOfSprites ค2อจ �นวน sprite ในช้-วง

framesPerSecond เป็�น คว�มเรั4วในก�รัเคล2�อนที่��ของ Sprite หน-วยเป็�น fps

AddAnimation(string animationKey, string textureName,

SpriteRange spriteRange, int spriteWidth, int spriteHeight,int numberOfSprites, int framesPerSecond)

Page 84: XNA Game Studio 3.0

ก�รัว�ด Sprite Animation

• ม�ด�วยก�น 2 แบบ• แบบที่�� 1

gameTime เป็�นต�วแป็รัของเวล�ในเกมanimationKey ช้2�อ ActionของSpritespriteBatch น � spriteBatchจ�ก Class game เข��ม�ใช้�ง�นposition เป็�นต �แหน-งของภั�พัที่��ต�องก�รัให� draw

Draw(GameTime gameTime, string animationKey, SpriteBatch batch, Vector2 position)

Page 85: XNA Game Studio 3.0

ก�รัว�ด Sprite Animation

• แบบที่�� 2

gameTime เป็�นต�วแป็รัของเวล�ในเกมanimationKey ช้2�อ ActionของSpritespriteBatch น � spriteBatchจ�ก Class game เข��ม�ใช้�ง�นposition เป็�นต �แหน-งของภั�พัที่��ต�องก�รัให� drawColor เป็�นสำ�ที่��ใช้�ในก�รัแสำดง

Draw(GameTime gameTime, string animationKey, SpriteBatch batch, Vector2 position, Color color)

Page 86: XNA Game Studio 3.0

ก�รัใช้�ง�น SpriteAnimationManager

• ให� add PhotXNALibrary ต�มว�ธ์�ก-อนหน��น�(• จ�กน�(น ให�ป็รัะก�ศต�วแป็รั ใน Class Game1

SpriteAnimationManager sam; • จ�กน�(นใน Method LoadContent

sam = new SpriteAnimationManager(this, @""); // new instance โดยให�ใสำ- instance game และ folder ที่��เก4บภั�พัComponents.Add(sam); // ที่ �ก�รั Add sam เข��ไป็ในเกม

Page 87: XNA Game Studio 3.0

ก�รัใช้�ง�น SpriteAnimationManager

sam.AddAnimation("Bee_All", "Monster_Set_01", new SpriteCount(6, 3),8); // ที่ �ก�รั Add Animation เป็�นก�รั Play Animation ที่�(งหมดใน Texture โดยบอก column และ row รัวมถ1ง จ �นวน FramesPerSecondsam.AddAnimation("Bee_Fly", "Monster_Set_01", new SpriteRange(1, 1, 6, 1), 76, 66, 6, 8); //ที่ �ก�รั Add Animation เป็�นก�รั Play Animation ต�(งแต- 11, ถ1ง 61, คว�มกว��งย�วของ sprite จ �นวนframesในAction 6 frames และ ม� คว�มเรั4ว

8 fps

Page 88: XNA Game Studio 3.0

ก�รัใช้�ง�น SpriteAnimationManager

spriteBatch.Begin();sam.Draw(gameTime, "Bee_All", spriteBatch, new Vector2(30,300)); //ที่ �ก�รัว�ด Action Bee_Allsam.Draw(gameTime, "Bee_Fly", spriteBatch, new Vector2(300, 300));spriteBatch.End(); // ที่ �ก�รัว�ด Action Bee_Fly

•ใน Method Draw ให�เพั��มด�งต-อไป็น�(

Page 89: XNA Game Studio 3.0

เสำ�ยงใน XNA

• ใน XNA 3.0 น�(นสำ�ม�รัถ ใช้� .wav, .mp3 ได�โดยตรังใน Content Project ได�เลย และ สำ�ม�รัถในเครั2�องม2อ ที่��ช้2�อMicrosoft Cross-Platform Audio Creation Tool หรั�อ XACT

• สำ��งหน1�งที่��ต�องจ �ไว�ว-� XACT ไม-ใช้-โป็รัแกรัมป็รัะเภัที่ Sound Editor ห�กจะต�องก�รัแก� หรั2อต�ดต-อเสำ�ยงควรัที่ �ให�เรั�ยบรั�อยจ�กโป็รัแกรัมอ2�นๆ ก-อน

Page 90: XNA Game Studio 3.0

ม�รั0 �จ�กก�บ Wave, Wave Bank, Sound Bank, Cue

• Wave เป็�นไฟล�ที่��เก4บ Audio Data เพั2�อใช้�ได�อย-�งอ�สำรัะ หรั2อ เพั2�อเกมเสำ�ยงที่��ใช้�ป็รัะกอบ effect ในเกม

• Wave Bank เป็�นไฟล�ที่��เก4บ wave file หล�ยๆ อ�นไว�ด�วยก�นเป็�นกล'-มอย0-ในไฟล�เด�ยว

• Sound Bank เป็�นกล'-มของหล�ยๆ wave bank และ cue

• Cue เป็�นไฟล�ที่��ยอมให�Programmerเล-นเสำ�ยง โดยป็รัะกอบด�วย เสำ�ยงอย-�งน�อย 1 เสำ�ยง และอ��งอ�งก�บ sound bank

Page 91: XNA Game Studio 3.0

ก�รัใช้�ง�น XACT• Click ป็'>ม Start เมน0 และเล2อก All Programs. • Click Folder Microsoft XNA Game Studio 3.0 เล2อก Tools

และ click Microsoft Cross-Platform Audio Creation Tool (XACT)

• จ�กน�(นให�ที่ �ก�รั New Project ข1(นม�โดยต�องน �ไฟล�น�มสำก'ล xap ไป็ใสำ-ไว�ใน Folder ที่��ต�องก�รั ควรัสำรั��งแยกจ�ก Project XNA ที่��เป็�น Visual Studio

• เล2อก Create Wave Bank• ที่ �ก�รั ล�ก Sound หรั2อที่ �ก�รั insert wave file โดยก�รั Click

ขว� ใน Wave Bank• ก-อนที่ดสำอบก�รั Play ให�ไป็เป็3ด โป็รัแกรัมช้2�อ XACT Audition

Utility ก-อน ห�ได�จ�ก Start> All Program>Microsoft XNA Game Studio 3.0>Tools> XACT Audition Utility

Page 92: XNA Game Studio 3.0

ก�รัใช้�ง�น XACT• แล�วที่ �ก�รั Create Sound Bank• ที่ �ก�รัล�ก file จ�ก wave bank ม� sound bank• แล�วที่ �ก�รัล�ก ไฟล�จ�ก sound bank ลงไป็ที่�� cue• เสำรั4จแล�วให�ที่ �ก�รั Build Sound Project• ให�ที่ �ก�รั save• จ�กน�(นให�กล�บไป็ที่�� Microsoft Visual C# 2008 Express• เป็3ด Project ที่��ต�องก�รัใสำ-เสำ�ยง ที่ �ก�รั add exist item

เล2อก .xap ที่��ที่ �ก�รั save ไว�• จ�กน�(นให�ที่ �ก�รั copy ไฟล�น�มสำก'ล xgs, xsb, xwb ไป็

ไว�ที่��เด�ยวก�นก�บ .xap ซึ่1�งในที่��น�(ค2อ Folder Content

Page 93: XNA Game Studio 3.0

ก�รัเข�ยนโป็รัแกรัมเสำ�ยงโดยใช้� XACT

• Method ที่��ใช้�ที่ �ก�รัโหลด เสำ�ยงที่��ด�ที่��สำ'ดคงไม-พั�น LoadContent ซึ่1�งจะสำรั��ง Audio Engine, wave และ sound bank ในน�( โดยป็รัะก�ศต�วแป็รั AudioEngine, WaveBank และ SoundBank เป็�น static ใน Class Game1

• โดย AudioEngine เป็�นต�วแป็รัที่��เก4บค-� XACT Game Setting ไว�

• สำ-วน WaveBank และ SoundBank เป็�นก�รับอก AudioEngine ว-�ไฟล�ไหนถ0กเรั�ยกใช้�ง�น

Page 94: XNA Game Studio 3.0

ก�รัเข�ยนโป็รัแกรัมเสำ�ยงโดยใช้� XACT

• ใน Class Game1 ให�ใสำ-ต�วแป็รัด�งน�(

• ใน Method LoadContent ให�ใสำ-ด�งต-อไป็น�(

static AudioEngine audio; // ต�วแป็รัเน�(เก4บค-� XACT game settingstatic SoundBank soundBank;static WaveBank waveBank;Cue gameloopCue; //--------- ต�วแป็รัเก4บ SoundCue

Page 95: XNA Game Studio 3.0

ก�รัเข�ยนโป็รัแกรัมเสำ�ยงโดยใช้� XACT

• ใน Method LoadContent ให�ใสำ-ด�งต-อไป็น�(protected override void LoadContent(){ spriteBatch = new SpriteBatch(GraphicsDevice); audio = new AudioEngine("Content\\sound.xgs"); // XACT game setting File soundBank = new SoundBank(audio, "Content\\Sound Bank.xsb"); // XACT Sound Bank file waveBank = new WaveBank(audio, "Content\\Wave Bank.xwb"); // XACT Wave Bank File gameloopCue = soundBank.GetCue("gameloop"); // Cue เป็�นตัวที่��ใช้�ในก�รัเล่�นเสำ�ยงในเกม}

Page 96: XNA Game Studio 3.0

ค �สำ��งในก�รัสำ��งให� Play Sound

• ใน Class Cue ม�ค �สำ��งที่��น-�สำนใจอย0-หล�ยค �สำ��งที่��ใช้�ป็รัะจ �ด�งน�(

• และย�งม� status ที่��น-�สำนใจไว�ใช้�ป็รัะโยช้น�อ�กด�งน�(

Method คำ��อธิ�บ�ยPlay() เล-นเพัลงStop() หย'ดเพัลงResume() เล-นเพัลงต-อPause() หย'ดเพัลงช้��วครั�ว

Method คำ��อธิ�บ�ยIsPlaying ถ��เป็�นtrue แสำดงว-� เพัลงก �ล�งเล-น

อย0-IsPaused ถ��เป็�นtrue แสำดงว-�ที่ �ก�รัหย'ด

เพัลงช้��วครั�ว

Page 97: XNA Game Studio 3.0

ต�วอย-�ง Code ของก�รัเล-นเพัลงโดยใช้� XACT

protected override void Update(GameTime gameTime){ if (!gameloopCue.IsPlaying) // ถ�� gameloopCue ไม-ที่ �ก�รัเล-นอย0-จะเป็�นจรั�ง {

gameloopCue.Play();}base.Update(gameTime);

}

• ด0ได�ใน Project ช้2�อว-� SoundTest

Page 98: XNA Game Studio 3.0

ก�รัเล-น Sound ง-�ยๆ ผ-�น Class SoundEffect

• ที่ �ก�รั Add New Item น �เพัลงเข��ม�ใน project ใน Folder Content เหม2อนก�บก�รัโหลดภั�พั

• จ�กน�(นให�ป็รัะก�ศต�วแป็รัใน Class Game1

• ใน Method LoadContent ให�ที่ �ต�มด�งน�(SoundEffect soundEffect; // ต�วแป็รั soundEffect

protected override void LoadContent(){ spriteBatch = new SpriteBatch(GraphicsDevice); soundEffect = Content.Load<SoundEffect>(@"gameloop"); // โหลด Content soundEffect.Play(); // เล-นเพัลง}