Vous êtes sur la page 1sur 31

I HC QUC GIA TPHCM TRNG I HC CNG NGH THNG TIN KHOA CNG NGH PHN MM -------o0o-------

XNA
Cng ngh .Net
GVHD : Phm Thi Vng Sinh vin : Vn Phc t - 07520074 Minh Huy 07520152 Nguyn Hong Minh - 07520229

NHN XT CA GIO VIN


........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ...........................................................................................................................

........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ........................................................................................................................... ...........................................................................................................................

Gii thiu

Microsoft DirectX l tp hp cc APIs (application programming interfaces) qun l tc v lin quan ti multimedia c bit l trong lnh vc game. DirectX 1.0 l phin bn u tin c xut hin ln u vo nm 1995, phin bn gn y nht c pht hnh l DirectX 11. Ngy nay th DirectX c s dng rng ri trong vic pht trin game trn h iu hnh Microsoft Windows v trn cc h my XBOX. OpenGL c Silicon Graphics pht trin v xut hin rng ri vo nm 1992, OpenGL tng c s dng trong h iu hnh Window 95. Tuy nhin ngy nay th OpenGL c coi l i th cnh tranh ln nht vi DirectX trong mng x l ha. Khc vi DirectX, OpenGL l tp hp cc cross-platform API qun l mng ha my tnh 2D v 3D. Do OpenGL c th chy trn nhu nn tng khc nhau nh cc thit b cm tay, Play Station, UNIX Trc y khi cha c cc API ha h tr th vic lp trnh game l rt kh khn. Ngi lp trnh vin rt kh khn khi tip xc vi nhiu loi phn cng th hin ha khc nhau. Do khi DirectX hay OpenGL ra i n to ra nhng giao din thng nht gip ngi lp trnh vin ko cn phi quan tm qu nhiu vo cc loi phn cng khc nhau m ch tp trung vo lp trnh nng cao cht lng ca game. Tuy nhin do c pht trin t kh lu (tui th hn 15 nm) nn vic lp trnh trn cc th vin DirectX v OpenGL tng i kh khn hn cc cng ngh hin nay, nht l khi lm vic vi cc hm APIs ha v li thng c s dng ch yu vi ngn ng C/C++ c t rt lu, y cng l l do m hu ht nhng lp trnh vin, sinh vin cm thy y ny v ngi tip xc vi vic lp trnh game. Khi DirectX 9 c pht hnh th c mt vi s thay i, ngoi phin bn chnh thng, Microsoft cn gii thiu ti cc lp trnh vin khi nim Managed DirectX. Khi nim mi ny i km vi mt lot cc ngn ng mi nh C#, VB v cc thut ng CLR, garbage collector Managed DirectX l mt ngn ng d hiu v trong sng hn so vi DirectX nguyn thy. N trnh c cc APIs phc tp v cc vn rc ri ca C++ do rt c s ng h t cng ng. Vn ln nht i vi Managed DirectX (v thm ch ngy nay vn thng c nhc ti) l tc thc thi. Ko ai tin hoc hoi nghi rng tc ca Managed DirectX c th chy nhanh. Do vic Managed DirectX b i vo qun lng v ko pht trin tip l iu tt yu (chm dt vo khong nm 2005) Tuy nhin sau mt thi gian th Microsoft gii thiu XNA Game Studio. y l th vin mang c c tnh d s dng ca Managed DirectX v mnh m trn kin trc ca DirectX. N h tr thm rt nhiu nn tng khc nhau nh Xbox 360, Zune HD v mi nht l Window Phone 7. Khng ging nh Managed Microsoft, XNA Game Studio c h tr v pht trin rt mnh song song vi DirectX. Cha th nh gi r rng c tng lai ca XNA Game Studio nh th no trong tng lai, tuy nhin vi s pht trin mnh m nh hin nay c bit l phin bn 4.0 mi nht h tr pht trin game trn Window Phone 7 l mt s b sung tuyt vi mang li nhiu phng php lm game tt nht trn cc h my di ng trong lc m cuc chin gia cc in thoi, my tnh bng ang si ng nht, XNA ha hn s tr thnh mt trong nhng th vin lp trnh game tt nht trong tng lai.

Lch s

XNA c pht trin bi Microsoft trong mt vi nm trc tuy nhin mi ti GDC (Game Developer Conference) nm 2004 th XNA mi c cng b ln u tin. XNA ban u c coi l t vit tt ca Xbox New Architecture, nhng sau khi XBOX360 ra i th XNA c hiu nh mt tn ring.

XNA Game Studio l mt mi trng lp trnh cho php ta s dng Visual Studio to ra game trn Window Phone, Xbox 360 v trn mi trng h iu hnh Window. N hon ton min ph v c th download v PC thoi mi. XNA Game Studio bao gm XNA Framework l mt tp th vin pht trin game da trn nn tng Microsoft .NET Framework 2.0. Cho ti hin nay th bao gm 5 phin bn XNA Game Studio xut hin. XNA Game Studio Express : y l phin bn u tin c gii thiu v chnh thc c th download vo ngy 30 thng 8 nm 2006. Vo ngy 24 thng 4 nm 2007 th Microsoft c pht hnh 1 bn update gi l XNA Game Studio Express 1.0 Refresh cho phin bn ny. XNA Game Studio 2.0 : pht hnh vo ngy 13 thng 12 nm 2007, c th s dng vi tt c cc phin bn Visual Studio 2005 XNA Game Studio 3.0 : pht hnh vo ngy 30 thng 10 nm 2008, XNA Game Studio 3.0 cho php pht trin game trn nn tng Zune. Phin bn ny h tr y C# 3.0, LINQ v c th dng Visual Studio 2008 lp trnh. XNA Game Studio 3.1 : pht hnh vo 11 thng 7 nm 2009 gip ngi lp trnh c th pht trin mt vi chc nng mi trn Xbox 360. XNA Game Studio 4.0 : c gii thiu ln u vo ngy 9 thng 3 nm 2010 GDC v pht hnh vo 16 thng 9 nm 2010. Phin bn ny h tr pht trin trn h iu hnh Windows Phone 7. i km thm mt lot chc nng mi v c th kt hp s dng Visual Studio 2010 pht trin game.

Thnh phn

XNA cho php chng ta lm rt nhiu th, n c xy dng cho lp trnh vin c th qun l v thao tc d dng ti tt c cc thnh phn c th tn ti trong 1 ng dng game. C th im qua cc namespace c gi bn trong XNA Game Studio 4.0 nh Microsoft.Xna.Framework : Framework tng qut cha cc objects, cc php tnh ton v cc c im chung ca mt chng trinh game Microsoft.Xna.Framework.Graphics : H tr tt c cc c im lin quan ti ha 2D v 3D Microsoft.Xna.Framework.Audio : H tr phn m thanh Microsoft.Xna.Framework.Input : H tr qun l cc thit b nhp (nh gamepad, keyboard v mouse) Microsoft.Xna.Framework.GameServices : H tr cc truy cp ti XBOX LIVE Microsoft.Xna.Framework.Media : Cc phng thc a phng tin cho hnh nh, m thanh Microsoft.Xna.Framework.Content : Th vin vng lu tr cc ti nguyn trong game Microsoft.Xna.Framework.Net : H tr cc thit lp network Microsoft.Xna.Framework.Storage : Cc lu tr vi thit lp nh dng cao cp

Phn mm yu cu

XNA Game Studio 4.0: C th download trn trang ch ca Microsoft (www.microsoft.com/downloads) Microsoft Visual Studio 2010 : y l mi trng lp trnh game, XNA Game Studio 4.0 c th s dng trong hu ht cc phin bn Microsoft Visual Studio 2010 nh Microsoft Visual Studio 2010 Express for Window Phone Microsoft Visual C# 2010 Express Edition Microsoft Visual Studio 2010 Standard Edition

Microsoft Visual Studio 2010 Professional Edition Microsoft .NET Framework 4.0 : XNA Game Studio 4.0 i hi phi c Microsoft .NET Framework 4.0 Ngoi ra cn c 1 card mn hnh h tr ti thiu DirectX 9.

Ci t XNA Game Studio

Qu trnh ci t XNA rt n gin, sau khi chn file ci t, ta c k cc iu khon s dng trong mn hnh ENU Setup.

Sau bm Accept nu mun tip tc ci t, tip theo chn Install v ch i cho n khi ng dng c ci t thnh cng

ng dng Game vi XNA

Khi ng Visual Studio, trong Visual Studio chn File->New->Project. Sau khi ca s New Project hin ln, bn thanh Installed Templates tri chn Visual C#->XNA Game Studio 4.0. Bn pha phi ca s ta c th ty chn nhiu ty chn khc nhau ty theo mc ch, y ta chn Windows Game (4.0) v t tn cho n phn Name (v d y ta t l Collision), a ch cha project phn Location.

Sau khi chng trnh hon tt khi to, thanh Tool ta chn Debug->Start Debugging chy chng trnh, kt qu l ta c ng dng game hin ra mn hnh.

Nh vy nh ta thy th khc vi khi lm vic vi DirectX hay OpenGL i hi ta phi t thit lp cu hnh chy ng dng Game th XNA thit lp sn ht, cc vn khc nh phn gii hay thit lp ng dng chy dng fullscreen ta c th d dng thay i bng i tng GraphicDeviceManager. Trong chng trnh va c khi to, ta thy pha bn ca s Solution Explorer c 2 projects l Collision v CollisionContent. Bn trong Collision cha tt c cc file thc thi ca chng trnh cn CollisionContent s cha cc resource ca ng dng, khi cn thao tc ti mt resource bn trong CollisionContent th ta s s dng i tng ContentManager load n ln (chi tit s cp sau). Click vo file Game1.cs bn trong project Collision, chng ta s thy c ngoi hm khi to th

c 5 hm chnh nh sau : Initialize, LoadContent, Update, Draw, UnloadContent. y l 5 hm chnh th hin cu trc ca mt ng dng XNA

Cu trc

Initialize : y l ni dng khi to bin v cc i tng quan trng cn thit thit lp ng dng. Nhng i tng ny thng l SpriteBatch qun l vic render hnh nh 2D, Content Manager qun l cc ti nguyn trong game v cc i tng tng qut trong game nh score, items Cc audio cng thng c load ln trong giai on ny. Mt im lu l cc thnh phn graphics khng c load ln ti y, cng vic ny s c thc hin hm LoadContent. Hm Initialize s c gi mt ln duy nht khi bt u vo chng trnh. LoadContent : c gi ngay sau hm Initialize, hm ny c thc thi bt c khi no cc ni dung graphics, sounds, models, cn c load ln b nh. GameLoop : Hu ht cc tin trnh trong game u c x l game loop. Ti y, game s tnh ton cc cng vic input, animation, artificial intelligence, collision, render C 2 hm c gi thc thi trong GameLoop l Update v Draw. Trong GameLoop th 2 hm ny c gi lin tc trong sut qu trnh chi. Thng th Update c gi thng xuyn hn hm Draw, tuy nhin vic ny c XNA framework h tr qun l. Update : Trong y cha ng on code qun l vic update cc thuc tnh ca i tng nh v tr, va chm, tc , animation qun l vic input ca ngi chi, b m thi gian, cp nht im, AI Draw : Qun l vic render v tt c cc hnh vi lin quan ti vic x l ha ln mn hnh. Cc chc nng c bn nh clear mn hnh, thit lp mu sc, cc hiu ng phc tp trong game UnloadContent : Trong hm ny, nu cc objects cn c hy hoc g khi b nh trc khi thot ra khi game hoc chun b cho vic load mt level mi, hm UnLoadContent s x l vic ny.

Game2D vi XNA

Game l mt trong nhng ngnh cng ngh pht trin cc mnh vo thi im hin nay. Vi tc chng mt nng cao cht lng cc thit b ha v hng lot cc studio ngy m nghim cu pht trin game th ta c hng t nhng sn phm 3D cht lng c pht hnh trong tng ngy. Tuy nhin iu ny khng phi l tnh trng phn nh s li tn ca th loi game 2D trn th trng. Mc khc thi gian gn y vi s pht trin bt ng ca cc th h in thoi di ng, my tnh bng, mng x hi li to ra mi trng cc k mu m cho cc game 2D. Ta c th im danh hng lot cc sn phm game 2D nh m v thu v hng triu $ cho cc nh pht trin.

Sprite
Lp trnh 2D trong XNA i lin vi khi nim Sprite (tng t cho DirectX). Mt sprite l mt cu trc qun l vic th hin hnh nh. Sprite lun i km vi 1 i tng Texture2D. Texture l i tng i din hnh nh, ta s load hnh nh ln Texture. Sprite trong XNA h tr ta rt nhiu thao tc t c bn n phc tp nh scale (ko gin nh) rotation (xoay hnh) transparent (lm m nh) depth layer (sp xp nh theo chiu su) ... H trc ta c th render ln mn hnh, sprite s dng 2 bin integer xc nh ta X v Y ca bc nh cn render. Ta ny s da trn ta ca mn hnh m gc ta nm gc tri trn

Nh hnh trn ta thy c 3 im A, B, C ln lt ta (10, 20)(10, 20) v (20, 20). Load Resouce v render image V d u tin v vic s dng Sprite l load mt file image v render n ra mn hnh. u tin ta khi to project Window Game (4.0) v t tn l Demo1. M file Game1.cs, ta thy c 2 bin c khi to sn l GraphicsDeviceManager v SpriteBatch, y l 2 thnh phn c bn nht trong 1 ng dng XNA. GraphicsDeviceManager c dng thit t

cu hnh cho ng dng Game (coi chi tit trong cc v d) cn SpriteBatch chnh l Sprite m chng ta ang ni ti, ta s dng n render cc nh. u tin chng ta th s dng GraphicsDeviceManager, trong Game1.cs th bin graphics c khi to kiu ny. Chng ta vo trong hm khi to Game1 v thm 2 dng code graphics.PreferredBackBufferHeight = 600; graphics.PreferredBackBufferWidth = 800; 2 dng lnh trn thay i kch thc ca ng dng theo chiu ngang l 800px v chiu dc l 600px. Tip theo chng ta chun b sn 1 file hnh nh v a vo th mc Demo1Content trong project Demo1 (Demo1\Demo1\Demo1Content). y ta dng file oaktree.png

Tip theo ta s a file oaktree.png vo project bng cch click chut phi vo Demo1Content chn Add->Existing Item v chn file oaktree.png

Sau khi add file oaktree.png vo Demo1Content, chng ta tin hnh load hnh nh ln. u tin chng ta phi khi to 1 Texture qun l hnh nh ny. y ta dng kiu i tng Texture2D. u tin ta khi to mt i tng dng Texture2D t tn l texture. Texture2D texture; Sau trong hm LoadContent ta thm hm texture = Content.Load<Texture2D>(@"oaktree"); Chng ta dng i tng Content khi to sn trong ng dng XNA Load 1 Texture2D tn l oaktree ln i tng texture ca chng ta. Sau khi load hnh nh ln, cng vic tip theo ca chng ta l render n, chng ta s thc hin cng vic ny hm Render. Ta thm cc dng lnh ny sau hm Clear.
spriteBatch.Begin(); spriteBatch.Draw(texture, Vector2.Zero, Color.White); spriteBatch.End();

Ta t cc hm Draw ca spriteBatch bn trong 2 hm Begin v End, vic ny l quy nh XNA c th bo cho device render cc nh 2D nh th no. Trong hm Draw ta thy c

3 tham s, th nht l texture (hnh nh) cn render, tham s th 2 l v tr t nh, tham s th ba l mu pha vi nh, nu ta chn mu trng th nh s hin th mu sc thc ca n. Chy chng trnh v ta s c c kt qu nh sau

Scale image Vn y ta thy c trong Demo1 l hnh nh c load ln c kch thc qu ln hn so vi ng dng XNA m ta khi to. Cng may l XNA h tr cho ta kh nng scale (co gin) hnh nh li cho ph hp vi kch thc ca mn hnh. Ta s dng tham s scale trong hm Draw, v d ta c kch thc tm nh l 1280 x 800, kch thc ny s c gi nguyn khi tham s scale l 1.0, tuy nhin khi scale l 0.625 th kch thc ca nh s thay i li l 800 * 500. C mt cch khc scale nh l thit t vng hin th trong mn hnh nh t ng scale li. Ta xem cch thc hin ny trong Demo2. Demo2 c bn c cu trc y nh Demo1, ring hm Draw thng s th 2 ta chnh li l spriteBatch.Draw(texture, new Rectangle(0, 0, 800, 600), Color.White); Sau chy li ng dng, ta thy hnh nh c scale nh li va kht vi ng dng.

Quay tr li vi hm Draw, ta thy l n thay i tham s th 2, thay v tham s th 2 trong Demo1 l v tr ca imagine c hin ln th trong Demo2 n thay th bng 1 khung rectangle gm 4 thng s l ta X, Y t hnh nh ln ng dng v chiu rng, cao ca hnh nh c hin ra. Trong v d ta t hnh nh ta (0, 0) v c kch thc 800x600 va kht vi kch thc ca s ng dng. Ta th thay i mt cht trn hm khi to bng vic thm dng lnh graphics.IsFullScreen = true; Sau chy li chng trnh th ta thy lc ny ng dng c thit lp ch fullscreen. Qua 2 v d th ta c th hnh dung c ta c th thit lp li ng dng mt cch d dng bng i tng GraphicsDeviceManager bng cch thay i cc thuc tnh ca n. R rng y l mt li th rt ln khi s dng XNA.

Animation
Nh vy ta thy vic load hnh nh v render n thc hin rt d dng vi XNA, tuy nhin c th gi l 1 game hon chnh th khng th ch c load nhng tm hnh tnh ln, chng ta cn nhng tm hnh m n c th chuyn ng hay gi l animation. u tin ta ni mt cht v animation, thc ra y ch l mt chui thay i cc hnh nh to cho ngi xem cm gic nh vt th ang thay i. Mt v d nh hnh bn di y

Ta thy hnh trn l mt chui gm nhiu hnh m t cc trng thi khc nhau ca mt vt th, nh vy bng cch ghp n li vi nhau tng thi im khc nhau lp i lp li th ta s to cho ngi xem cm gic nh vt th ang chuyn ng.

Ta s s dng cc k thut trong XNA thc hin iu ny, nh li cc Demo trn ta ch n gin v ton b mt tm hnh ln ng dng, tuy nhin i vi v d ny th ta cn phi v 1 phn ca bc nh. Rt may mn l XNA h tr rt tt cho ta thc hin iu ny. Ta s xy dng ng dng Demo3 thc hin iu ny, u tin to ng dng, sau thm resource vo Content nh cc phn Demo trn thc hin, y ta s dng hnh nh nh v d trn. Ta thc hin cc thao tc load hnh nh thnh texture2D v dng spriteBatch render n ra mn hnh nh cc Demo trn thc hin.

Ta thy hin ti chng ta vn ch render ton b nh, by gi chng ta chnh li hm Draw ca spriteBatch nh sau
spriteBatch.Draw(texture, Vector2.Zero, new Rectangle(0, 0, 43, 43), Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);

Chy li chng trnh ta thy lc ny ng dng ca chng ta tch ra render 1 phn nh ca nh

Gii thch mt cht v Draw, th t cc tham s trong hm nh sau 1. Texture2D l hnh nh cn render 2. V tr ca hnh nh cn render, y ta t ti gc ta (0, 0) 3. Phn renctangle trong texture2D cn render, ta thy trong hnh c tt c 48 hnh nh v ta render phn hnh nh gc trn cng bn tri. Phn hnh ny nm ta 0,

0 v c rng v cao l 43.

4. y l mu sc trn vi nh, ta mu white hnh nh th hin mu sc chnh xc ca n. 5. Tham s th 5 l gc xoay ca nh, y ta mc nh l 0 6. Tham s th 6 l gc origin ca nh, gc origin l im khng thay i ca nh khi ta thc hin scale (ko gin) hoc rotate (xoay). 7. Tham s ny l scale (co gin) ca tm nh, ta gi tr 1 nh hin th ng kch thc ca n, gi tr cng cao th nh s cng c phng to. 8. Gi tr SpriteEffect l hiu ng ca nh, trong v d ny ta khng xi hiu ng g. 9. Gi tr cui cng l layerDepth, gi tr ny nh hng ti vic nh render nm trong hay nm ngoi, nu nh nm bn ngoi th n s che cc nh nm bn trong n. Tip theo chng ta s coi cch c th thay i tng nh nh khc khi hin th nh th no. Ch ti tham s th 3 trong hm Draw, nu ta thay i tham s ny th ta s d dng render c cc nh nh khc nhau. Vn ta cn quan tm tip theo l chng ta s render thay i cc nh theo tc thi gian nh th no. Chng ta s xy dng b thay i thi gian nh sau. u tin ta thm 2 bin timeSinceLastFrame v milisecondsPerFrame, 2 bin ny s dng gi tr milisecond. int timeSinceLastFrame = 0; int millisecondsPerFrame = 16; Bin timeSinceLastFrame l tr thi gian m ng dng tri qua tnh t ln render frame gn nht. Trong khi milisecondsPerFrame l tr thi gian ti thiu gia 2 Frame. iu ny c ngha l khi timeSinceLastFrame ln hn milisecondPerFrame th ta s v frame k tip, ng thi ta gn li gi tr cho timeSinceLastFrame bng 0 khi va render 1 frame. Ch y frame c th hiu n gin l nh hin th ti mt thi im, trong game chng ta cn c khi nim FPS (frames per second) tc l s frame hin th trong 1 giy. Ta c th m t tng trn bng hnh sau

Ta thy ti mi on mu ng vi gi tr milisecondsPerFrame l khong thi gian m cc frame s thay i, cn ng vi mi on mu xanh l cy ta s render 1 frame mi ng vi nh mi, ng thi ti th timeSinceLastFrame s gn li l 0. Nh vy ta thy nu

milisecondsPerFrame cng nh th tc thay i frame s cng nhanh, iu ny lm cho ta c cm gic vt th di chuyn nhanh hn

Ta c th thay i tr s milisecondsPerFrame nu mun thay i tc . V d nh milisecondsPerFrame l 50, tc l sau 50 ms th ta render 1 frame. Nh vy ta s thy tc ca n chm hn khi ta chnh milisecondsPerFrame l 16. Ngoi ra tnh khong thi gian m ng dng tri qua k t ln cp nht Frame trc th ta c th s dng hm c sn trong i tng GameTime. y l i tng qun l thi gian m XNA cung cp sn. timeSinceLastFrame += gameTime.ElapsedGameTime.Miliseconds; Nh v d trn ta thy gameTime tr v s lng miliseconds tri qua k t ln cp nht frame trc. By gi chng ta c phn qun l thi gian v chng ta bit c sau bao nhiu thi gian th cn render 1 frame mi. Tip theo chng ta cn xc nh ti frame chng ta cn render hnh nh no. Quay li vi tham s trong hm Draw, ta c th thay i rectangle xc nh vng nh cn render. Trong hnh th ta c 48 nh nh, v ta s render n theo chiu t tri sang phi, t trn xung di v lp li qu trnh ny.

Ta s lp cng thc tm ra vng rectangle thch hp ti mi v tr trong hnh. Chng ta s dng cc bin Point nh sau Point frameSize = new Point(75, 75); Point currentFrame = new Point(0, 0); Point sheetSize = new Point(6, 8);

frameSize l kch thc ca mi nh con, trong v d ny l 75x75 pixel. currentFrame l v tr hin ti ca nh ang c render, v d v tr (4, 5) ng vi hnh s 30. sheetSize l s lng nh nh theo chiu ngang v dc c trong hnh. By gi ta s sa li tham s trong hm Draw nh sau
spriteBatch.Draw(texture, Vector2.Zero, new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y), Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);

Ta thy l tham s th 3 lc ny s c tr v l vng rectangle ng vi v tr ca currentFrame hin ti. Sau khi chnh li hm Draw, ta thm phn qun l thi gian vo hm Update
timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds; if (timeSinceLastFrame > millisecondsPerFrame) { timeSinceLastFrame = 0; ++currentFrame.X; if (currentFrame.X >= sheetSize.X) { currentFrame.X = 0; ++currentFrame.Y; if (currentFrame.Y >= sheetSize.Y) currentFrame.Y = 0; } }

Ta thy nu nh thi gian tri qua tnh t frame trc (timeSinceLastFrame) ln hn khong thi gian cch gia 2 frame (millisecondsPerFrame) th ta s cp nht li currentFrame sang v tr mi. Sau khi chnh sa li, ta c th chy Demo3 thy c s thay i

Input
Chng ta c c mt vt th hot ng, s hp dn hn nu vt th ca chng ta c th di chuyn c. Khi ni ti iu ny ta s ngh ngay ti vic thay i tham s v tr trong hm Draw ca spriteBatch. Vic ny l tng i n gin, nhng n s hp dn hn nu chng ta c th iu khin vic di chuyn vt th ny bng chut hay bn phm.

XNA h tr rt tt vic qun l Input t ngi s dng, chng ta c th kim sot cc tc v t keyboard, mouse hoc Xbox 360 controller mt cch d dng. Chng ta s tm hiu tip theo sau vi Demo4 m t cch qun l Input vi XNA. Trong Demo4 ny chng ta s thc hin vic qun l keyboard kt hp vi nhng g ta thc hin t cc Demo trc. u tin chng ta to project Window Game tn Demo4 v thc hin tt c cc thao tc lm vi Demo3 c c mt vt th animation nh hnh pha trn. Tip theo chng ta s bt cc s kin ca keyboard. Keyboard XNA cung cp sn cho ta class Keyboard thao tc vi keyboard, class Mouse thao tc vi mouse v class GamePad thao tc vi Xbox360 gamepad. i vi Keyboard class, n c sn mt hm static GetState nhn v tnh trng ca keyboard hin ti di cu trc KeyboardState. Cu trc KeyboardState cha ng 3 hm ta c th kim sot cc input t keyboard nh sau Phng thc Keys[] GetPressedKeys () bool IsKeyDown (Keys key) Bool IsKeyUp (Keys key) Miu t Tr v mt mng cc phm c n ti thi im gi hm Tr v true hoc false kim tra xem phm ang n hay khng ti thi im gi hm Tr v true hoc false kim tra xem phm ang th hay khng ti thi im gi hm

Chng ta coi 1 v d v vic kim tra xem phm A c c bm hay khng. if(Keyboard.GetState( ).IsKeyDown(Keys.A)) { } Nhc li mt cht trong Demo3, chng ta c bin milisecondsPerFrame iu chnh tc animation nhanh hay chm ca vt th. By gi chng ta s s dng keyboard qun l tc ny. u tin ta thm vo trong hm Update on code bt s kin bm phm Left hoc Right if(Keyboard.GetState( ).IsKeyDown(Keys.Left)) { } if(Keyboard.GetState( ).IsKeyDown(Keys.Right)) { } Sau ta quy nh nu bm Left th s tng tr milisecondsPerFrame ln, iu ny ng thi lm gim tc animation ca vt, ngc li khi bm Right chng ta gim tr

milisecondsPerFrame, iu ny lm animation ca vt tng ln. Tt nhin chng ta cn thm cn cho milisecondsPerFrame. Chng ta c on code nh sau
if (Keyboard.GetState().IsKeyDown(Keys.Left) && millisecondsPerFrame < 100) 10) millisecondsPerFrame++; if (Keyboard.GetState().IsKeyDown(Keys.Right) && millisecondsPerFrame > millisecondsPerFrame--;

Mouse Tng t nh vic qun l Keyboard, XNA cung cp class Mouse phc v cho vic qun l mouse. Mouse class cng c hm static GetState tr v cu trc MouseState th hin trng thi ca mouse. Cu trc MouseState c mt vi properties gip cho chng ta thao tc vi mouse d dng nh Property LeftButton MiddleButton RightButton ScrollWheelValu e X Y Kiu Button State Button State Button State Int Int Int Miu t Tr v trng thi ca nt nhn tri chut Tr v trng thi ca nt nhn gia chut Tr v trng thi ca nt nhn phi chut Tr v s lng chuyn ng ca con ln chut so vi trng thi lc trc ca n. Tr v ta X ca chut so vi gc tri trn ca ca s game Tr v ta Y ca chut so vi gc tri trn ca ca s game

Chng ta s lm v d nho nh cho vic qun l mouse trong Demo4 ca chng ta. u tin qun l mouse phi nhn cu trc MouseState ca n. Chng ta t on code trong hm Update MouseState mouseState = Mouse.GetState(); Tip theo chng ta s di chuyn vt th theo ta di chuyn ca chut, chng ta lm iu ny bng cch thay i tham s ta render vt th (tham s th 2) trong hm Draw thnh ta ca mouse.
spriteBatch.Draw(texture, new Vector2(mouseState.X, mouseState.Y), new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y), Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);

Chy li Demo4 coi kt qu m ta c c

m thanh
Ti y th chng ta nm c cc k thut c bn qun l vic x l hnh nh trong XNA, chng ta c th bt u xy dng mt game 2D n gin. By gi chng ta s quan tm ti mt k thut khc l k thut qun l m thanh trong XNA. Tng t nh nhng k thut khc trnh by, m thanh cng l mt phn c XNA h tr rt tt. u tin chng ta coi vic load mt file m thanh vo project XNA nh th no. Cng vic ny cng thc hin y chang nh vic load mt file hnh nh. u tin ta a file m thanh vo th mc cha resource bn trong Content, sau a n vo Content Solution ca project, chng ta thc hin y chang nh khi thc hin vi file hnh nh. XNA h tr tt cc nh dng file m thanh ph bin hin nay, Demo5 chng ta s coi cch chi file nhc nh dng wav, ngoi ra XNA cn c th chi cc nh dng phc tp hn nh mp3 hay wma.

Trong hnh ta thy l chng ta a vo project file wav tn start. Tip theo chng ta s lm cho file ny chy trong ng dng game. lm c vic XNA cung cp cho ta class SoundEffect qun l file nhc. u tin ta c th to mt i tng SoundEffect SoundEffect sound = null; Tip theo trong hm LoadContent ta s load file nhc ln i tng SoundEffect ny, cng vic ny thc hin y chang nh khi ta load file hnh nh sound = Content.Load<SoundEffect>(@Audio\start);

By gi trong hm Update, ta thc hin vic chy file nhc, cng vic ny ht sc n gin l ch vn gi hm Play ca i tng SoundEffect. Tuy nhin chng ta s kt hp vi phm P play nhc, tc l khi bm phm P th on nhc s c chi. on code thc thi s nh sau if (Keyboard.GetState().IsKeyDown(Keys.P)) sound.Play(); Chy v kim tra ng dng bng cch n phm P, ta s thy on nhc c ni ln.

Cng ngh .Net

GVHD : Phm Thi Vng Sinh vin : Vn Phc t - 07520074 Minh Huy 07520152 Nguyn Hong Minh - 07520229

Gii thiu
OakFairy l ng dng game vit trn nn tng XNA 4.0 hon thnh trong thi gian hn 1 tun. OakFairy s dng cc k thut c bn ca XNA nh render hnh nh, qun l input, qun l m thanh

Gameplay
Trong vai tr ngi chi, game cung cp sn mt vi item cho ngi chi s dng thao tc vi oaktree nhm o bo oaktree trng thi tt nht. C 4 item c th s dng Water : Cung cp nc cho cy Fertilizer : Cung cp phn bn cho cy Chemical : Phun thuc ha hc cho cy Share : Chia nc gia cc tn l

Info
OakFairy s cung cp cho ngi chi giao din thng tin trng thi im ca OakTree ngi chi c th nm bt c tnh hnh.

Ngoi ra cn c thng tin trng thi thi gian chi, notification

Trong game s xut hin nhiu yu t thi tit khc nhau, y l cc event c sn pht sinh theo hot ng ca ngi chi. Cc event c trong game l Ma Gi Nng Su bnh

Ngoi ra thng xuyn c cc li nhc nh trong game ngi chi theo di v tnh chnh thch hp

Game Input
Ngi chi ch yu thao tc vi mouse, bng vic click chn cc cng c c cung c p v thao tc ln oaktree. Da vo trng thi ca tn l m ta chn la loi item thch hp. C nhiu loi trng thi khc nhau ca tn l c th hin qua cc mu sc khc nhau gip cho ngi chi d nhn bit c tnh trng thc t gii quyt vn .

Chi tit thng s k thut


Xem trong file Analyse.

Game3D vi XNA

Khng ch h tr tt cc game nh dng 2D m XNA cn h tr rt mnh game nh dng 3D ang ngy mt ph bin trong th trng hin nay. So vi 2D th cc khi nim trong game 3D phc tp hn rt nhiu. Trc khi i tip cc phn k thut trong XNA chng ta s i qua mt cht khi nim trong game2D

H thng toa 3D.

Trong mi trng 3D s dng mt h trc ta gm 3 thng s thng t tn l x, y, z, n khc vi h trc ta 2 chiu vi 2 tham s x, y. Tt c cc vt th 3D trong game thng c gi l model s c v tr c xc nh trong h trc 3D ny. C 2 loi h trc thng c s dng ch yu khc nhau chiu dng trc z l h trc ta tay tri v h trc ta tay phi

XNA thng s dng h trc ta tay phi.

Camera
xc nh nhng vt th no s c hin th ln mn hnh trong game3D, chng ta phi s dng camera. Camera l khi nim tru tng, trong ng dng game3D th n c th hin qua vic tnh ton matrix v plane. Nhng vt th no nm trong vng chiu ca camera cng chnh l cc vt th c hin ln trn mn nh. Camera cng c cc thuc tnh ca ring n, trong XNA th c 2 hm s lin quan ti vic thit t camera l Matrix.CreateLookAt v Matrix.CreatePerspectiveFieldOfView. Hm CreateLookAt tr v mt matrix quy nh cc thng tin nh v tr camera, hng nhn, N bao gm 3 tham s nh sau Tham s cameraPosition cameraTarget cameraUpVector Kiu Vector3 Vector3 Vector3 Miu t V tr camera trong h trc 3D V tr m camera ang nhn Vector quy nh hng quay ln ca camera

Ngoi cc thng s c bn trn th camera cn c cc thng s khc nh tm nearPlane, farPlane, Chng ta c th hnh dung cc thng s qua hnh nh nh sau

Theo nh hnh trn th cc cc vt th nm gia near, far, top, down, left, right plane l cc vt th s c hin th trn mn hnh, chng ta c th thit lp cc thng s ny trong hm CreatePerspectiveFieldOfView Tham s fieldOfView aspectRatio nearPlaneDistance farPlaneDistance Kiu float float float float Miu t Gc m ca camera thng l 45 T l mn hnh, ta ly chiu di chia cho chiu cao (c vi chun nh 4:3 hoc 16:9) di t v tr camera ti nearPlane di t v tr camera ti farPlane

DrawPrimitives
Trong game3D khi render mt vt th hay mt hnh hc bt k chng ta u s dng cc im trong ta khng gian 3 chiu, chng ta gi cc im ny l vertex. iu ny c ngha l v d nh mt tm hnh 2 chiu s c th hin bng 4 vertex trong khng gian 3D, mt hnh hp ch nht s c th hin bng 8 vertex cn mt vt th phc tp th i khi tiu tn hng triu vertex, cc model ny thng c t trong file ring c phn m rng chm x. Ta thy hnh di y l mt model khng long c tp hp bi hng trm vertex trong khng gian 3 chiu.

Cc im ny c tp hp li thnh mt mng cc vertex c gi l vertex buffer, chng ta s gi hm render tt c cc vertex c c hon chnh 1 model trong khng gian 3D. Vic lm ny c gi l DrawPrimitive. Ni thm mt cht v model. Model l tp hp cc vertex to nn hnh dng ca mt vt th. Tuy nhin bn thn n li cha nhiu model nh phc v cho nhiu tin ch khc nhau. V d nh hnh khng long nh trn ta thy c th chia nh ra thnh nhiu phn nh

ui, chn tay, mnh u Ngoi ra mi model s c nh km vi nhng hnh nh ca ring n, v d nh hnh nh v u khng long, ui khng long, ngi ta gi nhng hnh nh ny l texture ca model .

Render Pipeline
Do s phc tp ca khng gian 3D, vic hin th hnh nh 3D khng n gin nh vic ch render 1 tm nh 2D. Mn th hin hnh nh 3D trn mn hnh th chng ta phi qua mt lot cc giai on tnh ton mang tnh cht ton hc, cc qu trnh ny c gi l render pipeline, ta c th lit k cc giai on nh sau

Rt phc tp nht l cc vn lin quan ti ton hc, tuy nhin XNA h tr rt tt cho ta tt c cc giai on ny, khi code nhng ng dng 3D n gin trn nn tng XNA, chng ta ch cn quan tm ti mt vi giai on trong qu trnh trn nh World space : thit t v tr ca model trn khng gian game v tr v khng gian ny s c lu tr trong mt matrix 4x4 View space & Projection & Viewport: thit t v tr camera, qu trnh ny c XNA h tr sn bng 2 hm CreateLookAt v CreatePerspectiveFieldOfView nh trnh by trn Lighting : nh sng trong game

Chng ta s coi lm vic vi ng dng 3D nh th no trong Demo6. Cng vic ca Demo6 vn n gin l load mt model 3D ln mn hnh ng dng ca chng ta.

u tin nh bao ng dng khc, chng ta s load file cha model ca chng ta. Cng vic ny c thc hin y nh vic ta load hnh nh hoc m thanh trong cc Demo trn.

Demo m hnh vt th 3D

Thay v dng cc i tng Texture2D hoc SoundEffect nh trong cc Demo trc, i vi model 3D chng ta s s dng i tng kiu Model, v dng hm Load y nh cc Demo trn
Model model;

Matrix[] modelTransforms;

model = Content.Load<Model>("ship"); modelTransforms = new Matrix[model.Bones.Count]; model.CopyAbsoluteBoneTransformsTo(modelTransforms);

Sau khi chng ta load c i tng. Chng ta s thc hin qu trnh render pipeline render model ra mn hnh. u tin ta thc hin qu trnh world space.
Matrix baseWorld = Matrix.CreateScale(0.4f) * Matrix.CreateRotationY(MathHelper.ToRadians(180));

Sau chng ta thc hin qu trnh lin quan ti Camera


Matrix view = Matrix.CreateLookAt(new Vector3(200, 300, 900), new Vector3(0, 50, 0), Vector3.Up); Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), GraphicsDevice.Viewport.AspectRatio, 0.1f, 10000.0f);

Cui cng chng ta s l Lighting v render ra mn hnh


foreach (ModelMesh mesh in model.Meshes) { Matrix localWorld = modelTransforms[mesh.ParentBone.Index] * baseWorld; foreach (ModelMeshPart part in mesh.MeshParts) { BasicEffect e = (BasicEffect)part.Effect; e.World = localWorld; e.View = view; e.Projection = projection; e.EnableDefaultLighting(); } } mesh.Draw();

Hin nay th trong lp trnh game3D c mt khi nim ha rt ph bin l shader. Shader gip cho ta c th kim sot mt render effect nh sng mu sc cng nh hnh dng vt th. Phi ni l game p hay honh trng ti u l u ph thuc vo vic lp trnh shader. XNA cng h tr vic lp trnh shader cao cp y nh DirectX, iu ny c ngha l nhng g ta thy trong 1 game DirectX hon ton c th lm c trong XNA. C th theo di Demo7. y chng ta s khng ni su vo lnh vc ny. Quay li trong Demo6 ca chng ta ta s dng DefaultLingting, tc l s dng phn shader c bn m XNA h tr cho chng ta. Chy ng dng Demo6 thy kt qu

Windows Phone 7 vi XNA

Ti y th ta bit c hu ht cc k thut c bn trong XNA s dng trong lnh vc lp trnh Game. Tuy nhin hin nay ni ti XNA m thiu i vic h tr trn Window Phone 7 th l mt iu thiu st ln. Hu ht cc game hin nay pht trin trn Window Phone 7 u s dng ch yu l XNA v vic lp trnh trn n da trn s kt hp gia C# v XNA s cho nhng ngi mi lm quen cm thy d chu hn l s kt hp Objective C vi OpenGL ES hay Java vi OpenGL ES. Chng ta s code trn window phone 7 nh th no? Cu tr li l hon ton tng t nh code ng dng windows Game. C khc nhau th cng ch khc v mt qun l input v resource trong windows phone 7 c cht khc bit so vi windows Game. Chng ta c th thy c iu ny Demo3p v Demo6p. Cng chung mt on code v reousrce nh sau chng ta c th chuyn hon ton mt ng dng XNA trn nn windows sang windows phone 7 rt d dng.

Tng kt
XNA l mt nn tng cn mi l so vi cc n anh DirectX hay OpenGL. Tuy nhin n mang trong mnh rt nhiu thun li k tha tinh hoa t cc th vin ha i trc v ci tin mang cho mnh nhiu c im mnh m hn. Mc d cn rt kh khn v hn ch v nhiu mt nhng bng vic h tr tp trung pht trin khng ngng ca Microsoft, XNA ha hn s l s la chn ca nhiu doanh nghip pht trin game trn console, window v nht l lnh vc window phone 7. Bng s kt hp gia C# v XNA cng vi cc cng c h tr cao cp ca Microsoft i km vi thi i bng n s pht trin cc ng dng market h tr mobile th XNA c th s l s la chn thch hp cho

cc bn mn bt u pht trin trong lnh vc game hoc cng l c hi lm giu ca cc bn sinh vin sp ra trng.

Danh sch Demo v Project


Demo1..............................................................................................................11 Demo2..............................................................................................................12 Demo3..............................................................................................................16 Demo3p............................................................................................................28 Demo4..............................................................................................................18 Demo5..............................................................................................................18 Demo6..............................................................................................................26 Demo6p............................................................................................................28 OakFairy..........................................................................................................22

Tham kho
msdn.microsoft.com wikipedia.org Ebook o Learning XNA 4.0 o Microsoft XNA Unleashed o XNA Game Studio Creator Guide o Learn Programming Now - XNA Game Studio 4.0

Vous aimerez peut-être aussi