Jan 02, 2016
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
• แหล-งคว�มรั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
คว�มต�องก�รัรัะบบของ 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)
ข�(นตอนก�รัต�ดต�(ง 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
MyFirstGame
• ก-อนอ2�นให�ที่ �ก�รัเป็3ด Visual C# Express 2008• กดเล2อก New Project• ที่ �ก�รัเล2อก Windows Game (3.0)• ต�(งช้2�อ Project ว-� MyFirstGame กด ok จนกว-�จะ
เสำรั4จ
MyFirstGame
• หล�งจ�กเสำรั4จแล�ว ให�กด F5 เพั2�อที่ �ก�รัรั�นเกม
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 ที่��ใช้�ในก�รัแสำดงผลของเกม
XNA Game Loop
XNA Game Loop
• เป็3ด Project ที่��ช้2�อ XNAGameLoop แล�วลองรั�นด0ว-�ผลล�พัธ์�เป็�นอย-�งไรั
ก�รัช้�(ว�ดป็รัะสำ�ที่ธ์�ภั�พัของเครั2�อง• สำ��งที่��เรั�ใช้�ช้�(ว�ดป็รัะสำ�ที่ธ์�ภั�พัก�รัว�ดของเครั2�อง
น�(นๆ ม�หล�ยว�ธ์�ที่��เรั�จะว�ดได� โดยว�ธ์�ที่��ใช้�ง-�ยสำ'ดเห4นจะหน�ไม-พั�น Frames Per Second หรั2อ FPS
• FPS เป็�นก�รัว�ดใน 1 ว�น�ที่� เรั�ที่ �ก�รัเข��ใช้�ก�รัว�ดไป็ที่�(งหมดก��ครั�(ง
• เป็3ด Project ที่��ช้2�อว-� FPSTest
2D Basic Programming for XNA
Suphot Sawattiwong [email protected]
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 ไว�ด�วยเช้-นก�น
คว�มกว��ง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
คว�มกว��งxย�วของจอภั�พัใน XNA
ก�รัที่ �ง�นก�บ 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
GameComponent ใน XNA
• ใน XNA ม�ก�รัสำรั��ง Component เพั2�อเรั�ยกใช้�ในเกม ใน Class Game Component โดยใน Class ด�งกล-�วม�โครังสำรั��งในก�รัแยก logic ในก�รัใช้�ง�นออกจ�กต�ว Class Game หล�กได� และสำ�ม�รัถเพั��ม class GameComponent ใสำ-ไว�ใน project อ2�นๆ ได�ด�วยเช้-นก�น
• แต- GameComponent ม�แค- Method Update เที่-�น�(น ห�กต�องก�รัให�ม�ก�รัควบค'มก�รั Draw ด�วยให�ใช้� DrawableGameComponent
DrawableGameComponent
• จ�กก-อนหน��น�( ได�ม�ก�รัใช้�ว�ธ์�ค �นวณ fps ตอนน�(ม�ที่ � fps DrawableGameComponent ข1(นม�
• เรั��มแรักสำรั��ง Project ที่��ช้2�อ FPSDrawable• กด Add New Item โดยก�รั click ขว� ใน
Solution Explorer• เล2อก GameComponent แล�วต�(งช้2�อว-� FPS
ต�วอย-�งก�รัเป็ล��ยน GameComponent เป็�น DrawableGameComponent
public class FPS : Microsoft.Xna.Framework.GameComponent
จ�ก
เป็�นpublic class FPS : Microsoft.Xna.Framework.DrawableGameComponent
ให�ด0ใน Project ที่��ช้2�อว-� FPSDrawable
ต�วอย-�งก�รั 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);
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)
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” น��นเอง
ก�รัน �ภั�พัเข�� Project
• Click ที่�� Folder Content ใน Solution Explorer• เล2อก Add>Add Exist Item แล�วไป็ย�ง Folder ที่��
เรั� Save ไฟล� ภั�พัไว� (ในแผ-น DVD Folder “Resource Example”) Fileภั�พัจะถ0ก copy เข��ม�ไว�ใน Content ที่�นที่�
ก�รัว�ดภั�พัใน 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
จอภั�พั
x+
Origin(0,0)
y+
2D Coordinate System
2D Coordinate System
• จะเห4นได�ว-� ห�กหน��จอม� Resolution 1024x768 จ'ดจะเรั��มจ�ก 0-1023 ในแนวแกน x และ 0-767 ในแนวแกน y และม'มขว�ล-�งสำ'ดจะม�จ'ด (1023, 767)
• ซึ่1�งใน XNA จะเก4บค-�ต �แหน-งเหล-�น�(ในต�วแป็รั Vector2 และต�วแป็รัแกน xและ y ในรั0ป็แบบ int
จอภั�พั Origin(0,0)
Vector(100,60) y-offset=60 Position(100,60)
x-offset=100
ต�วอย-�งก�รัว�ดภั�พัในต �แหน-งที่�� (100,60)
2D Transformation
• ในโลก 2D น�(นนอกจ�กต �แหน-งของภั�พัแล�ว ย�งสำ�ม�รัถที่ �ก�รัย��ยต �แหน-งของภั�พัได� รัวมถ1ง ย-อ/ขย�ย และ หม'นภั�พัได� สำ��งเหล-�น�(เรั�ยกรัวมๆ ว-� “2D Transformation”
ห�กต�องก�รัเล2�อนจ�กจ'ดเด�มไป็อ�ก 120, 40 จ'ด
ก�รัหม'น (Rotate)
• ใน XNA ม�ก�รัสำรั��งจ'ด Origin ของ Sprite เพั2�ออ �นวย
คว�มสำะดวกใน Rotate ห�กเรั�ใช้�จ'ดเด�มในก�รัหม'นจะออกม�เป็�น
แบบน�(
ก�รัใช้�จ'ดOrigin ของ Sprite เพั2�อใช้�ในก�รัหม'น
• ใน XNA สำ�ม�รัถก �หนดจ'ด Origin ของ Sprite ได�ว-�ต�องก�รัให�อย0-ในจ'ดใดของภั�พัเพั2�อสำะดวกในก�รัหม'น
ก�รัย-อ/ขย�ย(scale)
• ก�รัที่ �ให� Sprite ม�ขน�ดใหญ-ข1(นในก�รัว�ด ซึ่1�งใช้�จ'ด origin ในก�รัขย�ยเช้-นก�น
Vector2
• Vector2 เป็�นต�วแป็รัที่��เก4บค-� 2 ต�ว เรั�ม�กใช้�ก�บก�รัเก4บต �แหน-ง ม�
parameter ด�งต-อไป็น�(
Vector2 <ช้2�อต�วแป็รั> = new Vector2(<จ'ดPosition X>, <จ'ด Position Y>);
Rectangle
• เป็�นต�วแป็รัที่��เก4บขน�ด สำ��เหล��ยม โดยม� parameter ใน Constructor ด�งน�(
Rectangle <ช้2�อต�วแป็รั> = new Rectangle(<จ'ดPosition X>, <จ'ด Position Y>,<กว��ง>,<สำ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);
SpriteBatch
• ก�รัที่ �ง�นของ Method SpriteBatch ในสำ-วนก�รั Draw ใน
Draw Method น�(นแบ-งเป็�นหล�ย Method ด�งน�(– Begin() เป็�นก�รับอกจ'ดเรั��มต�นของ SpriteBatch และ
ย�งม�ก�รั set ค-�ต-�งๆ เช้-น SpriteBlendMode, SpriteSortMode
– Draw() ไว�สำ �หรั�บ Draw ภั�พัป็กต�โดยใช้� Texture2D– DrawString() ไว�สำ �หรั�บ Draw ข�อคว�มที่��ใช้�ในเกม – End() เป็�นก�รับอกจ'ดสำ�(นสำ'ดของ SpriteBatch
ก�รั Draw ใน SpriteBatch
Method คำ��อธิ�บ�ยDraw(Texture2D, Rectangle, Color)
ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Rectangle และสำ�ที่��ใช้�
Draw(Texture2D, Rectangle, Nullable<Rectangle>, Color)
ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��ภั�พั ในรั0ป็แบบ Rectangle, ต �แหน-งของภั�พัที่��น �ม�ว�ดเป็�นต�วเล2อกในรั0ป็แบบ Rectangle และสำ�ที่��ใช้�
ก�รั Draw ใน SpriteBatch
Method คำ��อธิ�บ�ยDraw(Texture2D, Rectangle, Nullable<Rectangle>, Color, float, Vector2, SpriteEffects, float)
ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��ภั�พั ในรั0ป็แบบ Rectangle,ต �แหน-งของภั�พัที่��น �ม�ว�ด เป็�นต�วเล2อกในรั0ป็แบบ Rectangle, สำ�ที่��ใช้�, ค-�สำ �หรั�บก�รัหม'น, ต �แหน-ง origin ใหม-, Sprite Effects, และค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง
ก�รั Draw ใน SpriteBatchMethod คำ��อธิ�บ�ยDraw(Texture2D, Vector2, Color)
ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Vector2 และสำ�ที่��ใช้�
Draw (Texture2D, Vector2, Nullable<Rectangle>, Color)
ก�รัว�ดโดยรัะบ' Texture2D ที่��ใช้�, ต �แหน-งที่��จะว�งเป็�นล�กษณะของ Vector2, ต �แหน-งของภั�พัที่��น �ม�ว�ด เป็�นต�วเล2อกและสำ�ที่��ใช้�
ก�รั 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กของภั�พัในก�รัจ�ดเรั�ยง
SpriteEffects
• เป็�น Effects ของ Sprite ที่��ที่ �ได�ในค �สำ��ง Draw ม�ด�งต-อไป็น�(
– SpriteEffects.FlipHorizontally ไว�พัล�กด��นแนวนอน– SpriteEffects.FlipVertically ไว�พัล�กด��นแนวต�(ง– SpriteEffects.None ไม-ม� Effect
ต�วอย-�งก�รัว�ดภั�พัBackground
• สำรั��ง Project ช้2�อ DrawBackground ข1(นม�• น �ภั�พั Background ใดก4ได�ไป็ใสำ-ใน โดยที่ �ต�มว�ธ์�
ก�รัน �ไฟล�เข�� Project• พั�มพั� Code ในสำ-วนต-อไป็น�( ป็รัะก�ศต�วแป็รัใน
Class Game1 ด�งต-อไป็น�(GraphicsDeviceManager graphics;SpriteBatch spriteBatch;Rectangle bgRect; //เป็�นก�รัป็รัะก�ศต�วแป็รัที่��เก4บต �แหน-งและขน�ดของ BackgroundTexture2D bgTexture; //ต�วแป็รัภั�พัที่��เรั�ใช้�เป็�นพั2(นหล�ง
ใน Constructor Game1
public Game1(){ graphics = new GraphicsDeviceManager(this); graphics.PreferredBackBufferWidth = 1024; // เป็�นก�รัก �หนดคว�มกว��งของหน��จอ graphics.PreferredBackBufferHeight = 768; // เป็�นก�รัก �หนดคว�มย�วของหน��จอ Content.RootDirectory = "Content";}
ใน 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();}
ใน 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}
ใน 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);}
ก�รัใช้� 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> แก�ขน�ดต�มต�องก�รั
ก�รัใช้� SpriteFont ในXNA• สำรั��งต�วแป็รั SpriteFont ไว�ใน Class Game1
ด�งน�(private SpriteFont font;
• ให�ใสำ- Code ลงใน Method LoadContentfont = Content.Load<SpriteFont>(@"AngsanaUPC14");
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กของภั�พัในก�รัจ�ดเรั�ยง
DrawString
Method คำ��อธิ�บ�ยDrawString(SpriteFont, String, Vector2, Color, float, Vector2, Vector2, SpriteEffects, float)
ก�รัว�ดโดยรัะบ' Sprite Font, ข�อคว�มที่��จะแสำดง, Vector2 สำ �หรั�บต �แหน-ง, สำ�ของ Font, ก�รัหม'น , จ'ด Origin, ค-�ย-อขย�ยเป็�น Vector2, Sprite Effect และ ค-�คว�มล1กของภั�พัในก�รัจ�ดเรั�ยง
ก�รัใช้�ภั�ษ�ไที่ยใน XNA
• ห�กต�องก�รัใช้�ภั�ษ�ไที่ยให�เพั��มข�อคว�มในกรัอบเหล-�น�(ลงไป็ในไฟล�ของ SpriteFont เพั2�อเป็�นก�รัเพั��มช้-วงของภั�ษ�ไที่ยลงไป็ <CharacterRegions>
<CharacterRegion> <Start> </Start> <End>~</End> </CharacterRegion>
</CharacterRegions>
<CharacterRegion> <Start>฀</Start> <End>๿</End> </CharacterRegion>
ต�วอย-�งก�รัว�ด Font
• ให�เป็3ด Project ที่��ช้2�อว-� AddNewFont ใน DVD เพั2�อที่ดสำอบก�รัว�ด Font
อ'ป็กรัณ�ควบค'มใน XNA
• ใน XNA ได�แบ-งอ'ป็กรัณ�ควบค'มเป็�นที่�(งหมด 3 ป็รัะเภัที่ ได�แก- Keyboard, Mouse, XBOX360 Controller
• โดยในที่��น�(ขอเน�นก�รัใช้�ง�น Keyboard ก�บ Mouse
ก�รัสำน�บสำน'นอ'ป็กรัณ�ควบค'มใน XNA
• จ�กต�รั�งเห4นได�ว-�ในเครั2�อง XBOX360 ไม-ม�ก�รัสำน�บสำน'น Mouse และ GamePad ที่��ใช้�ใน XNA ต�องเป็�น GamePad ที่��สำน�บสำน'น XBOX360 Controller เที่-�น�(น ไม-เช้-นน�(นจะใช้�ไม-ได�
Keyboard
• ใน XNA แบ-ง Keyboard ที่��ใช้�แบ-งเป็�น 2 ป็รัะเภัที่ ค2อ Keyboard ที่��วไป็ ก�บ ChatPad
Keyboard
• โดยที่��ก�รัที่ �ง�นหล�กของ Keyboard ใน XNA เน�นก�รัใช้�ง�น 2 Class หล�ก ได�แก- Keyboard และ KeyboardState
• โดยม� enums ไว�เรั�ยกอ��งอ�งค-�ป็'>มต-�งๆ ของ Keyboard ค2อ Keys
• ว�ธ์�ก�รัเรั�ยกใช้� Keyboard สำ�ม�รัถที่ �ได�โดยใน Method Update เช้-น
ต�วอย-�งก�รัเข�ยนควบค'ม Keyboard ใน XNA
protected override void Update(GameTime gameTime){
// ที่ดสำอบก�รัใช้� Keyboard โดยห�กกดป็'>ม Escape ให�ออกจ�กเกม if (Keyboard.GetState().IsKeyDown(Keys.Escape)) { this.Exit(); } base.Update(gameTime);}
Keyboard
• สำ-วน KeyboardState เป็�นต�วที่��แสำดงสำถ�นะว-�ขณะน�( keyboard อย0-ในสำถ�นะ KeyDown หรั2อว-� KeyUp– KeyDown ค2อจ�งหวะที่��เรั�กดป็'>ม– KeyUp ค2อจ�งหวะที่��เรั�ป็ล-อยป็'>ม
ก�รัเอ�สำถ�นะของ Keyboard
• ช้'ดค �สำ��งก�รัน �สำถ�นะของ Keyboardไป็ใช้�ง�นสำ�ม�รัถที่ �ได�ผ-�นที่�งช้'ดค �สำ��ง Keyboard.GetState()
• ห�กใช้�ค �สำ��งด�งกล-�ว ที่ �ให�ได�ค-�ของ KeyboardState ม�เพั2�อพัรั�อมใช้�ง�นต-อไป็ โดยช้'ดค �สำ��ง Keyboard.GetState() ม�ก�รัเรั�ยกใช้�ได� 2 แบบด�งน�(
KeyboardState
• Method ของ KeyboardState ที่��จ �เป็�นต�องรั0 �
ต�วอย-�งของก�รัรั�บค-� KeyboardState
• ให�เป็3ดด0 Project ที่��ช้2�อว-� InputKeyboardState
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
Mouse
• โดย MouseState เป็�นต�วแสำดงสำถ�นะต-�งๆ ของ mouse โดยสำ�ม�รัถก �หนดได�ด�งน�(
MouseState mouseState = Mouse.GetState();ต�วแป็รัใน MouseState ม�ด�งต-อไป็น�(
MouseState
MouseState
ButtonState
• Enum ButtonState จะเก4บ Event อย0- 2 แบบ ค2อ KeyPress และ Key Release โดยอ'ป็กรัณ�ควบค'มที่��ใช้� ได�แก-Mouse และ GamePad
ต�วอย-�งก�รั Click Mouse
• ให�เป็3ด Project MouseClick ข1(นม� แล�วรั�น เห4นได�ว-�ไม-ว-� click mouse ซึ่��ยตรังไหน ก4เป็�นป็'>มที่�(งหมด
• ซึ่1�งห�กที่ �เป็�นป็'>มกดจรั�งๆ ต�องรั0 �จ�กเรั2�องของก�รัช้นก�น หรั2อ Collision Detection ก-อน
Collision Detection
• ก�รัช้นก�นของว�ตถ' ในเกมเรั�จะว�ดค-�จ�กก�รัช้นได�โดยก�รัด0ว-� ว�ตถ' 2
อ�นได�ม�ก�รั ซึ่�อนที่�บก�นหรั2อไม-
• โดย Collision Detect จะเป็�นก�รัเช้4คว-�ว�ตถ' 2 ช้�(นน�(ซึ่�อนที่�บก�นหรั2อไม-
Collision Detection
• โดยจะเอ�ต �แหน-ง ของว�ตถ' คว�มกว��งย�วของว�ตถ'ม�ว�ดเป็�น
สำ��เหล��ยม
Collision Detection
• ช้'ดค �สำ��งในก�รัใช้�ได�โดยอ�ศ�ย Rectangle ในก�รัตรัวจสำอบเรั2�องก�รัช้นได�ด�งน�(
สำ��เหล��ยมอ�นที่�� 1.Intersects(สำ��เหล��ยมอ�นที่�� 2) เช้-น cursorRect.Intersects(playBtnRect) โดยค �สำ��งน�( ได�สำ-งค-� true ห�กเก�ดก�รัช้นก�น และ
false ห�กไม-ม�ก�รัช้นก�นเก�ดข1(น • สำ�ม�รัถด0ได�ใน Project MouseClick2
Sprite
• ใน XNA น�(น ใช้�ต�วแป็รั Texture2D ในก�รัเก4บรั0ป็ภั�พัที่��ใช้�ง�นแต-ห�กศ�พัที่�ที่��น�ยมใช้�ก�นที่��วไป็ในก�รัพั�ฒน�เกม อ�จจะเรั�ยกสำ��งเหล-�น�(ว-� “Sprite”
• โดยป็กต�ที่��ผ-�นม�ได�ม�ก�รัโหลดรั0ป็เพั2�อใช้�ในเกมโดย 1 ภั�พั เป็�นภั�พัที่��พัรั�อมใช้�ง�น แต-ห�กเกมม�เป็�น 100 ภั�พั ม�นก4เสำ�ยเวล�ที่��โหลด content น�นเก�นไป็
• ด�งน�(นเรั�จ1งม�ว�ธ์�ก�รัจ�ดภั�พัที่��ม�ล�กษณะก�รัใช้�ง�นเข��ด�วยก�นม�อย0-ในภั�พัเด�ยวก�น และเล2อกที่��จ�ดก�รัโดยก�รั Clip
ก�รั Clip ของ Sprite• ก�รั Clip เป็�นก�รัต�ดภั�พัออกม�เป็�นสำ-วนเพั2�อที่��ใช้�ง�นเฉพั�ะสำ-วน
น�(นๆได�
Rectangle(localX,localY,คว�มกว��งที่��ต�องก�รั, คว�มย�วที่��ต�องก�รั)
แล�วน �ไป็ใสำ-ใน Draw
ต�วอย-�งก�รั Clip
• ต�วอย-�งจ�กภั�พัก-อนหน��ห�ก clip ที่��กรัอบสำ�แดงของภั�พัต�องใช้�ค �สำ��งด�งน�(
spriteBatch.Draw(t2dSprite, new Vector(10, 20), new Rectangle(0, 0, 64, 64), Color.White);
ต�วอย-�งก�รั Clip
• ห�กต�องก�รั Clip ด�งภั�พัต�องเข�ยน code ด�งต-อไป็น�(spriteBatch.Draw(t2dSprite, new Vector(10, 20),
new Rectangle(10, 64, 64, 64), Color.White);• ให�ด0 Project ที่��ช้2�อว-� SpriteClip แล�วลองรั�นด0
Cel Animation หรั2อ Sprite Animation
• จ�กที่��รั0 �จ�กก�รัใช้� Clip แล�ว ต-อม�เป็�นก�รัเพั��มข�ดคว�มสำ�ม�รัถของ Clip ให�สำ0งข1(น โดยก�รันอกจ�กที่ �ก�รั Clip เป็�นช้�(นง�นแล�ว น �ม�ที่ �ก�รัต-อเน2�องเป็�น Animation ก�น ซึ่1�งสำ��งเหล-�น�(เรั�ยกว-� “Cel Animation”
ก�รัเพั��ม Library เข�� Project
• ให� click ขว� ต�มรั0ป็
• แล�วเล2อก add ไป็ที่�� Existing project ด�งภั�พั• เล2อก Folder Project Library ที่��ต�องก�รัแล�วกด
ok
ก�รัเพั��ม Library เข�� Project
• ให� click ขว� ต�มรั0ป็แล�วเล2อกadd Reference…
ก�รัเพั��ม Library เข�� Project
• เล2อก Library ที่��ต�องก�รั ต�มรั0ป็ แล�วกด ok
ก�รัเพั��ม Library เข�� Project
• จ�กน�(นให�ที่ �ก�รัพั�มพั�ข�อคว�มเพั2�อขอใช้� Library โดยก�รัพั�มพั� using ต�มด�วยช้2�อ NameSpace เช้-นusing PhotXNALibrary;
• จ�กน�(นสำ�ม�รัถใช้�ง�นได�ต�มป็กต�ต-อไป็ ลองด0ต�มต�วอย-�งต-อไป็ในเรั2�องของ SpriteAnimation
ช้'ดค �สำ��งในก�รัใช้�ง�น SpriteAnimationManager
• ก�รัป็รัะก�ศ Instance ที่ �ได�โดยม� parameter ด�งน�(ต�วแป็รั = new SpriteAnimationManager(Game game, string contentPath);
• โดยม� game เป็�นต�วที่��เรั�ยก Class game ที่��เป็�นต�วเรั�ยกใช้� sam
contentPath เป็�นที่��อย0-ของที่��เก4บภั�พัใน Folder Contentอ�กที่�
ช้'ดค �สำ��งในก�รัใช้�ง�น SpriteAnimationManager
• ก�รัป็รัะก�ศ Instance ที่ �ได�โดยม� parameter ด�งน�(ต�วแป็รั = new SpriteAnimationManager(Game game, string contentPath);
• โดยม� game เป็�นต�วที่��เรั�ยก Class game ที่��เป็�นต�วเรั�ยกใช้� sam
contentPath เป็�นที่��อย0-ของที่��เก4บภั�พัใน Folder Contentอ�กที่�
ก�รั 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)
ก�รั 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)
ก�รัว�ด Sprite Animation
• ม�ด�วยก�น 2 แบบ• แบบที่�� 1
gameTime เป็�นต�วแป็รัของเวล�ในเกมanimationKey ช้2�อ ActionของSpritespriteBatch น � spriteBatchจ�ก Class game เข��ม�ใช้�ง�นposition เป็�นต �แหน-งของภั�พัที่��ต�องก�รัให� draw
Draw(GameTime gameTime, string animationKey, SpriteBatch batch, Vector2 position)
ก�รัว�ด Sprite Animation
• แบบที่�� 2
gameTime เป็�นต�วแป็รัของเวล�ในเกมanimationKey ช้2�อ ActionของSpritespriteBatch น � spriteBatchจ�ก Class game เข��ม�ใช้�ง�นposition เป็�นต �แหน-งของภั�พัที่��ต�องก�รัให� drawColor เป็�นสำ�ที่��ใช้�ในก�รัแสำดง
Draw(GameTime gameTime, string animationKey, SpriteBatch batch, Vector2 position, Color color)
ก�รัใช้�ง�น SpriteAnimationManager
• ให� add PhotXNALibrary ต�มว�ธ์�ก-อนหน��น�(• จ�กน�(น ให�ป็รัะก�ศต�วแป็รั ใน Class Game1
SpriteAnimationManager sam; • จ�กน�(นใน Method LoadContent
sam = new SpriteAnimationManager(this, @""); // new instance โดยให�ใสำ- instance game และ folder ที่��เก4บภั�พัComponents.Add(sam); // ที่ �ก�รั Add sam เข��ไป็ในเกม
ก�รัใช้�ง�น 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
ก�รัใช้�ง�น 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 ให�เพั��มด�งต-อไป็น�(
เสำ�ยงใน XNA
• ใน XNA 3.0 น�(นสำ�ม�รัถ ใช้� .wav, .mp3 ได�โดยตรังใน Content Project ได�เลย และ สำ�ม�รัถในเครั2�องม2อ ที่��ช้2�อMicrosoft Cross-Platform Audio Creation Tool หรั�อ XACT
• สำ��งหน1�งที่��ต�องจ �ไว�ว-� XACT ไม-ใช้-โป็รัแกรัมป็รัะเภัที่ Sound Editor ห�กจะต�องก�รัแก� หรั2อต�ดต-อเสำ�ยงควรัที่ �ให�เรั�ยบรั�อยจ�กโป็รัแกรัมอ2�นๆ ก-อน
ม�รั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
ก�รัใช้�ง�น 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
ก�รัใช้�ง�น 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
ก�รัเข�ยนโป็รัแกรัมเสำ�ยงโดยใช้� XACT
• Method ที่��ใช้�ที่ �ก�รัโหลด เสำ�ยงที่��ด�ที่��สำ'ดคงไม-พั�น LoadContent ซึ่1�งจะสำรั��ง Audio Engine, wave และ sound bank ในน�( โดยป็รัะก�ศต�วแป็รั AudioEngine, WaveBank และ SoundBank เป็�น static ใน Class Game1
• โดย AudioEngine เป็�นต�วแป็รัที่��เก4บค-� XACT Game Setting ไว�
• สำ-วน WaveBank และ SoundBank เป็�นก�รับอก AudioEngine ว-�ไฟล�ไหนถ0กเรั�ยกใช้�ง�น
ก�รัเข�ยนโป็รัแกรัมเสำ�ยงโดยใช้� XACT
• ใน Class Game1 ให�ใสำ-ต�วแป็รัด�งน�(
• ใน Method LoadContent ให�ใสำ-ด�งต-อไป็น�(
static AudioEngine audio; // ต�วแป็รัเน�(เก4บค-� XACT game settingstatic SoundBank soundBank;static WaveBank waveBank;Cue gameloopCue; //--------- ต�วแป็รัเก4บ SoundCue
ก�รัเข�ยนโป็รัแกรัมเสำ�ยงโดยใช้� 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 เป็�นตัวที่��ใช้�ในก�รัเล่�นเสำ�ยงในเกม}
ค �สำ��งในก�รัสำ��งให� Play Sound
• ใน Class Cue ม�ค �สำ��งที่��น-�สำนใจอย0-หล�ยค �สำ��งที่��ใช้�ป็รัะจ �ด�งน�(
• และย�งม� status ที่��น-�สำนใจไว�ใช้�ป็รัะโยช้น�อ�กด�งน�(
Method คำ��อธิ�บ�ยPlay() เล-นเพัลงStop() หย'ดเพัลงResume() เล-นเพัลงต-อPause() หย'ดเพัลงช้��วครั�ว
Method คำ��อธิ�บ�ยIsPlaying ถ��เป็�นtrue แสำดงว-� เพัลงก �ล�งเล-น
อย0-IsPaused ถ��เป็�นtrue แสำดงว-�ที่ �ก�รัหย'ด
เพัลงช้��วครั�ว
ต�วอย-�ง Code ของก�รัเล-นเพัลงโดยใช้� XACT
protected override void Update(GameTime gameTime){ if (!gameloopCue.IsPlaying) // ถ�� gameloopCue ไม-ที่ �ก�รัเล-นอย0-จะเป็�นจรั�ง {
gameloopCue.Play();}base.Update(gameTime);
}
• ด0ได�ใน Project ช้2�อว-� SoundTest
ก�รัเล-น 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(); // เล-นเพัลง}