intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tài liệu lập trình XNA - Tiếng việt

Chia sẻ: Nguyễn Phi Hùng | Ngày: | Loại File: PDF | Số trang:86

92
lượt xem
22
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Ước mo viết một game cho riêng mình, rộng ra thì viết 1 game cho VN mở mặt với thế giới. Ước mơ của mình là muốn VN chúng ta có một ngành CN giải trí điện tử lớn mạnh ngang tầm tụi Hàn chẳng hạn va rồi sẽ có ngày bọn tây, tàu đến VN xin mua bản quyền game đem về nước nó phát hành lại

Chủ đề:
Lưu

Nội dung Text: Tài liệu lập trình XNA - Tiếng việt

  1. L i nói u Ư c mơ vi t 1 game cho riêng mình , r ng ra thì vi t 1 game cho VN m m t v i th gi i. Ư c mơ c a mình là mu n VN chúng ta có m t ngành CN gi i trí đi n t l n m nh ngang t m t i Hàn ch ng h n và r i s có ngày b n tây, tàu đ n VN xin mua b n quy n game đem v nc nó phát hành la J . Hi n nay có vô s công c , Ngôn ng , môi trư ng phát tri n game, mình ch n XNA b i các lý do sau: -Các ưu đi m đã nêu trong forum, trên internet... -C a Microsoft mà mình tín nhi m th ng này. -Môi trư ng làm vi c chuyên nghi p, qu n lý t t. free khi làm game trên windows. Kh i lo sau này lôi kéo nhau ra toà. -NNLT C# đơn gi n, tư nhiên, d h c và hi u nhanh hơn so v i các NNLT khác. Bài tut này nh m m c đích nâng cao tay ngh cho b n thân và mình mu n ph bi n nh ng ki n th c cơ b n nh t v XNA cho m i ngư i. Sau này n u có các d án l n trên forum thì ch c m i ngư i đ u là các programmer online c r i. Tương lai là đi u r t khó đoán, th nên ta nên h c t ngay bây gi đi, sau này nh t đ nh s có lúc c n, nh t là các b n theo IT và tính c các b n đam mê IT n a. M t game Nh p vai tr c tuy n nhi u ngư i chơi n u ch d a vào tut này thì ko th nhưng vi t nh ng game nh t ng b n bè, b b ch hay chu n b cho nh ng d án l n hơn (có th trong tương lai các b n là ngư i mình mu n c ng tác đ y) thì mình tin tài li u này s có ích. Đ i v i nhi u ngư i, l p trình và công vi c nhàm chán, t m mình trong 1 đ ng code, th nhưng mu n vi t game ph i bi t l p trình, b n hãy nh công đo n thú v nh t khi l p trình game là l p trình chúng (ngoài ra LT ra còn có vi t ý tư ng, thu t toán, debug... ) L p trình không ch là công vi c đó là ngh thu t còn L p trình viên là ngh sĩ, t t nhiên r i :D Bài vi t d a trên tài li u: Beginning XNA 3.0 Game Programming From Novice to Professional nhà c a xu t b n APRESS. Bài vi t không th tránh kh i sai sót, m i g i ý th c m c ki n cáo j, các b n b h t vào đây thanh_vinh648@yahoo.com (n u b n mình ko online thư ng xuyên, các b n có th dùng s DĐ sau: 01649120185-Nghiêm c m nhá máy J ) Tác Gi Vũ Thành Vinh (Huy t sát)
  2. Gi i thi u sơ lu c v XNA và C#: XNA Không c n gi i thi u chi cho rư m rà, b n ch c n có Visual Studio và b XNA GSE 3.0 là ok. Chu n b môi trư ng phát tri n : - Nâng c p Visual Studio : Các phiên b n VS ñư c XNA h tr : Trích d n: * Visual C# 2005 Express Edition * Visual Studio 2005 Standard Edition * Visual Studio 2005 Professional Edition * Visual Studio 2005 Tools for the Microsoft Office System * Visual Studio 2005 Team Edition for Software Architects * Visual Studio 2005 Team Edition for Software Developers * Visual Studio 2005 Team Edition for Software Testers * Visual Studio 2005 Team Edition for Database Professionals * Visual Studio 2005 Team Suite + N u b n ñang xài VS C# Express thì down cái này (24.3MB) : Trích d n: http://download.microsoft.com/downlo...9-X86-INTL.exe N u ko xài C# mà xài các ngôn ng khác thì xem thêm t i Trích d n: http://www.microsoft.com/downloads/d...ng=en#filelist
  3. ) + N u b n ñang xài các phiên b n VS khác (ko ph i Express) thì down cái này (431.7MB - kh ng khi p T_T): Trích d n: http://download.microsoft.com/downlo...01-X86-ENU.exe - Ti p ñó là download XNA (98.6MB): Trích d n: http://download.microsoft.com/downlo...GS20_setup.exe N u ñ c ñư c ti ng Anh, b n có th tham kh o ph n hư ng d n c a MSDN Làm quen v i XNA Bây gi ta s ti n hành t o m t XNA Project m i Kh i ñ ng C#, b n ch n New Project -> Windows Game , r i gõ tên Project vào, nh n OK là t o xong :-D B n build ra r i ch y th s ñư c như hình :
  4. => Ra cái c a s xanh lè và không có con chu t là OK! Ngu n: ko bi t n a nhưng th y ñ y r y trên m ng, Thanks tác gi .
  5. ð hi u mã l nh b t bu c các b n ph i h c qua C#, t h c, online j cũng ñc, mình không gi i thích nhi u v C#,mà ch y u là các thành ph n c a XNA. Thư ng nh ng cái ñã gi i thích , lession sau mình b qua ho c nói sơ sơ... N i dung bài vi t ch y u v thu t toán và mã l nh File mã l nh g m có Game1.cs và pr gram.cs và nh ng th t vi t... N i dung game1.cs: ðây là file ch a nh ng mã l nh giúp 1 game có th ch y ñc bình thư ng, t t nhiên c u thành nó g m nhi u Component và DrawableGameComponent (class s n có trong XNA) ... ðây là gi i thi u cơ b n, tuy ñơn gi n nhưng các b n nên ñ c qua >= 1 l n using System; using System.Collections.Generic; using System.Linq; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; using Microsoft.Xna.Framework.Storage; //Nh ng th XNA s d ng b n ko c n using h t mà tuỳ t ng trư ng h p mà s d ng namespace WindowsGame1 { /// /// Đây là nh ng thi t l p ban đ u cho 1 SpriteBatch đ c bi t g i là SpriteBatch và đò h a, t t c đ u d a trên mã ngu n c a XNA /// public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } /// /// Cho phép game có th b t đ u thi t l p tru c khi b t đ u ch y /// Đây là nơi b n khai báo bi n, load Tài nguyên, hàm không f i đ h a (đ h a s có hàm khác load) ... /// Thi t l p cho các thành ph n c a game ///
  6. protected override void Initialize() { // Thêm vào thi t l p logic đây, thu ng cũng k c n l m base.Initialize(); } /// /// hàm LoadContent s đư c g i 1 làn khi ch y game và nó s load toàn b nh ng content trong game c a b n /// protected override void LoadContent() { // t o m t SpriteBatch m i, nó đư c dùng đ v texture. spriteBatch = new SpriteBatch(GraphicsDevice); } /// /// hàm UnloadContent đc g i 1 làn trong game khi b n out /// nó xóa s ch n i dung ch a trong game /// protected override void UnloadContent() { // không b t bu c f i có, tr d án l n ho c khi b n siêng năng. } /// /// hàm Update() hàm kt ĐK c a game khi ch y /// ki m tra ki m tra va ch m, input (mouse, keyboard), và chơi nh c protected override void Update(GameTime gameTime) { // cho phep game out (trên Xbox) if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // thêm vào logic c a game đây base.Update(gameTime); //GameTime là 1 bi n đ c bi t ch th i gian ch y game } /// /// Hàm g i khi c n v thì hàm s hi n lên /// protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); //xóa màn hình và thêm màn n n (Color.CornflowerBlue) // thêm vào mã l nh đ h a. base.Draw(gameTime); } } }
  7. ðây là n i dung cơ b n c a XNA, Nhi m v c a nó là hi n lên cái màn hình xanh lè: Trong ñây ch có hàm Draw() là th hi n File mã l nh th 2 là program.cs: using System; namespace XNADemo { static class Program { /// /// The main entry point for the application. /// static void Main(string[] args) { using (Game1 game = new Game1()) { game.Run(); } } } } //cái nài thì c đ yên th , không nên đ ng tay vô J
  8. Các file mã l nh: class do user t Đ/N, cái này do mình vi t và nó ko h ít đâu L Bài 1 : Đưa Đ i tu ng lên Màn hình Tài nguyên: m t texture (image) 64x64 có tên ball Đ u tiên khi vi t game là Object ph i đư c đưa lên screen, nghe thì đơn gi n nhưng trong XNA đây là vi c kha khá đâu đ u, đ i h i s ph i h p gi a các hàm trong Game1.cs Đ u tiên b n kh i ta project m i.cho nó 1 tài nguyên (image ch ng h n) T i c a s project, b n click ph i chu t vào m c Content, ch n Add -> Existing Item, h p tho i Add Existing Item m ra và b n tìm ñ n file c n ñưa vào project, add nó vào Ph n mã l nh: I M t đ i tu ng đưa lên monitor thì c n các y u t sau: SpriteBatch : m t Sprite đ c bi t , nó đ i di n cho m t ho c các sprite khác trong XNA. Nó có s n hay t t o đ u đư c. Texture: Đ i lo i là m t b c nh 2D (cũng có texture3D) bao ph lên Sprite trong game (thu ng là bao theo hình ch nh t). Class: l p là thành ph n không th thi u c a C# vì đây là ngôn ng hu ng đ i tu ng hoàn toàn, b t k sprite nào mu n th hi n đi u ph i có class rieng c a nó. Ph n I: class cho clsSprite Tính h p thành c a OOP (Composition): T t c object ch y trên chương trình đ u có mã l nh ho t đ ng riêng c a nó đc vi t l i thành các hàm, method, thu c tính trong class c a nó, t t c chúng h p thành lên class cho object. Nó có th th a k t nhi u ngu n khác nhau, sau này s nói thêm. T m th đã, đ u tiên chúng ta đi t cái đơn gi n nh t, mã l nh cho m t sprite đơn gi n th hi n trên màn hình: T o m t file *.cs đ t trong thư m c ch a project, hay add => class cung đc Câu l nh using s d ng code s n có c a XNA: using Microsoft.Xna.Framework.Graphics; // for Texture2D using Microsoft.Xna.Framework; // for Vector2
  9. C u trúc: Namespace => class =>function... Sau class là ph n tên l p, đ t jì là tùy b n, mình l y clsSprite class clsSprite { } 1.Khai báo Sau đó là ph n khai báo bi n, cũng là các thành ph n c a class: Vector2 là cái j?, nó là 1 c p (2 cái) bi n có liên quan đ n nhau trong game, b n nh n th y v trí c a v t g m có thu c tính X và Y, t c đ c a sprite cũng th có th theo trong Ox hoac Oy, (như SpeedX, SpeedY)... tùm lum th có th VD. Do đó, chúng ta s d ng vector2 cho các thu c tính size (height, width) Tuơng t cho t a đ position (X,Y) Texture thì b t bu c r i: public Texture2D texture { get; set; } // sprite texture, read-only property public Vector2 position { get; set; } // sprite position on screen public Vector2 size { get; set; } // sprite size in pixel 2.Nh p d li u M t hàm trùng tên v i class s đ m nh n vai trò này: r t đơn gi n thôi, nó nh n texture, position và size c a t bên ngoài làm c a nó public clsSprite (Texture2D newTexture, Vector2 newPosition, Vector2 newSize){ texture = newTexture; position = newPosition; size = newSize; } 3.Hàm đ h a Nhi m v c a sprite là th hi n trên screen, th nên hàm ch c năng c a nó ch c n Draw là đ : public void Draw(SpriteBatch spriteBatch)
  10. { spriteBatch.Draw(texture, position, Color.White); } Các y u t cơ b n như texture, v trí, màu khi v nhưng texture s đè lên cái White đó, b n kh i lo, thêm m y cái { n a là xong class... Ph n II: Hoàn thi n cho Game1.cs: Game1 s d ng: #region Using Statements using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; using System.Linq; using Microsoft.Xna.Framework.GamerServices; using Microsoft.Xna.Framework.Media; using Microsoft.Xna.Framework.Net; #endregion C b h t vào cũng đc, th a > thi u Game1 k th t Microsoft.Xna.Framework.Game Class Game1 c n đc b sung, b t đ u là khai báo các bi n s dùng: GraphicsDeviceManager graphics; clsSprite mySprite1; SpriteBatch spriteBatch; M t đ h a, s d ng cái s n có c a XNA M t Spite, cái chúng ta đã vi t class. SpriteBatch, cái đ đ i di n sprite. Game1 không c n nh p d li u t bên ngoài như clsSprite nhưng chúng ta v n vi t hàm Game1() đ thi t l p cho nó: public Game1() { graphics = new GraphicsDeviceManager(this); // S d ng đ h a cho chính nó (game1) graphics.PreferredBackBufferWidth = 500; graphics.PreferredBackBufferHeight = 300; //Chi u r ng c a s game Content.RootDirectory = "Content";
  11. //Thư m c g c ch a tài nguyên là “content” } Ti p theo m t hàm đ load tài nguyên cho game protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // Load a 2D texture sprite mySprite1 = new clsSprite(Content.Load("ball"), new Vector2(0f, 0f), new Vector2(64f, 64f)); } mySpite1 s đc load texture lên trên nó, file name là ball b n add vào tài nguyên c a game (project=>add=>existing items) file này có size 64x64 pixcel //câu l nh trên có nghĩa texture b t đ u l y t t a đ 0,0 c a ball và kick c là 64x64 (t c là c file ball đó) Ti p là m t hàm unload nh m xóa các thành ph n kh i b nh khi close game: protected override void UnloadContent() { // Free the previously alocated resources mySprite1.texture.Dispose( ); spriteBatch.Dispose(); } Hàm Update c gi nguyên th vì trong quá trình ch y, ch có quái j thay đ i c .
  12. Hàm đ h a: đây là cái quan tr ng nh t nó s đưa Sprite lên b ng m t texture ball t i v trí nh t đ nh: protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(SpriteBlendMode.AlphaBlend); mySprite1.Draw(spriteBatch); spriteBatch.End(); base.Draw(gameTime); } Ch đ tô ki u AlphaBlend này s cho phép chúng ta v các b c nh có ch tr ng (m t s chuơng trình như photóshop làm đc) Sprite c a chúng ta là mySpite1 s l y spriteBatch mà v cho nó, tru c m t hàm Draw luôn có l nh Begin(ki u tô) và End(); Xong rùi, F5 nào J Lưu ý file m u: có th máy b n ko nh n ra file ball.bmp vì khác đg d n, n u th c xoá file ball cũ đi, add m i nó vào m c content (kick ph i ch n add existing item) tương t cho các lession sau, n u nó báo thi u file, file not found thì c xoá h t r i add l i
  13. Bài 2 : Di chuy n Đ i tu ng trên màn hình Các b n có th dùng ti p project cũ đ hoàn thành lession này. Ph n I: b sung cho l p clsSprite: V t mu n di chuy n, ta thêm v n t c cho nó: vector2 velocity Thêm kick thu c screen đ check collided (va ch m): vector2 screenSize Thu c tính t a đ đi m trung tâm c a Sprite (đo n sau dùng nó đ vi t thu t tóan va ch m) Vector2 center Thu c tính bán kinh sprite(sau dùng nó đ vi t thu t tóan va ch m) float radius public Texture2D texture { get; set; } // sprite texture, read-only property public Vector2 position { get; set; } // sprite position on screen public Vector2 size { get; set; } // sprite size in pixels public Vector2 velocity { get; set; } // sprite velocity private Vector2 screenSize { get; set; } // screen size public Vector2 center{ get{ return position + (size/2);} } // sprite center public float radius { get { return size.X / 2; } } // sprite radius Thêm vào ph n nh p d li u: public clsSprite (Texture2D newTexture, Vector2 newPosition, Vector2 newSize, int ScreenWidth, int ScreenHeight){ texture = newTexture; position = newPosition; size = newSize; screenSize = new Vector2(ScreenWidth, ScreenHeight); } Chúng ta ch thêm m t d li u là chi u dài và r ng c a screen. Vi t thêm m t hàm bool tr v true n u có trùng gi a 2 sprite clsSprite và false n u ngu c l i: public bool Collides(clsSprite otherSprite) { // check if two sprites intersect return (this.position.X + this.size.X > otherSprite.position.X && this.position.X < otherSprite.position.X + otherSprite.size.X &&
  14. this.position.Y + this.size.Y > otherSprite.position.Y && this.position.Y < otherSprite.position.Y + otherSprite.size.Y); } Nó tính toán t a đ và kick thư c 2 sprite xem chúng có trùng nhau không, return tr v true n u bi u th c trong () đu c th a mãn. Đ bi u di n các b n có th xem hình du i đây: Hàm này không c n thi t l m vì chúng ta s d ng nó trong lession3, chi vi t đ mang tính minh h a môt cách ki m tra va ch m khác thôi, b n không thêm nó vào cũng đc Sau này chúng ta có cách khác đ ki m tra va ch m, đó là v lên 1 hcn xung quanh m i sprite và kt va cham thông qua 2 hcn đó. Thêm m t hàm đ ki m tra va ch m biên c a 2 sprite, so sánh kho ng cách gi a trung tâm 2 sprite và t ng bán kính c a chúng: tr v true n u bi u th c trong return() đu c th a mãn. Chung ta s d ng hàm này đ ki m tra va ch m 2sprite trong quá trình chay game. public bool CircleCollides(clsSprite otherSprite) { // Check if two circle sprites collided return (Vector2.Distance(this.center, otherSprite.center) < this.radius + otherSprite.radius); }
  15. M t hàm ñ ki m tra có va ch m v i biên hay không? N u có ñ o giá tr velocity.X ho c velocity.Y. n u không thì sprite di chuy n (position tăng theo velocity c a nó) public void Move() { // if we´ll move out of the screen, invert velocity // checking right boundary if (position.X + size.X + velocity.X > screenSize.X) velocity = new Vector2(-velocity.X, velocity.Y); // checking bottom boundary if (position.Y + size.Y + velocity.Y > screenSize.Y) velocity = new Vector2(velocity.X, -velocity.Y); // checking left boundary if (position.X + velocity.X < 0) velocity = new Vector2(-velocity.X, velocity.Y); // checking bottom boundary if (position.Y + velocity.Y < 0) velocity = new Vector2(velocity.X, -velocity.Y); // since we adjusted the velocity, just add it to the current position position += velocity; } Hàm cu i cùng là hàm ñ h a th hi n c a sprite, r t quen thu c: public void Draw(SpriteBatch spriteBatch) { spriteBatch.Draw(texture, position, Color.White);
  16. } Phan II: b sung cho Game1.cs Chúng ta t o ra 2 sprite l y tên mySpite1 và mySprite2 clsSprite mySprite1; clsSprite mySprite2; Loadcontent cũng có 2sprite (load texture) kh i t o giá tr t c đ cho nó, theo 2 tr c x và y: protected override void LoadContent() { // Load a 2D texture sprite mySprite1 = new clsSprite(Content.Load("ball"), new Vector2(0f, 0f), new Vector2(64f, 64f), graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight); mySprite2 = new clsSprite(Content.Load("ball"), new Vector2(218f, 118f), new Vector2(64f, 64f), graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight); // Create a SpriteBatch to render the sprite spriteBatch = new SpriteBatch(graphics.GraphicsDevice); // set the speed the sprites will move mySprite1.velocity = new Vector2(5, 5); mySprite2.velocity = new Vector2(3, -3); } B sung thêm hàm unLoad: protected override void UnloadContent() { // Free the previously alocated resources mySprite1.texture.Dispose(); mySprite2.texture.Dispose(); spriteBatch.Dispose(); } B sung thu c tính chi u dài và r ng c a screen graphics.PreferredBackBufferWidth = 500; graphics.PreferredBackBufferHeight = 300; 2Sprite không ch di chuy n mà còn tương tác v i nhau:Chúng ta ki m tra va ch m trong hàm Update, b i l hàm Update s ki m tra game trong quá trình ch y đ thay đ i nó, nó s bi t khi nào 2 sprite ch m nhau, ch m screenBound ho c là không. N u 2 sprite ch m nhau, chúng s đ o t c đ c a nhau (v n t c c a sprite 1 s chu en qua sprite2 và ngư c l i)
  17. Di u này nghi m đúng ĐL b o toàn đ ng lư ng trong v t lý J protected override void Update(GameTime gameTime) { // Move the sprites mySprite1.Move(); mySprite2.Move(); if (mySprite1.CircleCollides(mySprite2)) { Vector2 tempVelocity = mySprite1.velocity; mySprite1.velocity = mySprite2.velocity; mySprite2.velocity = tempVelocity; } base.Update(gameTime); } Cơ b n là xong thêm hàm đ h a n a, nó s v sprite1 và sprite2 lên screen: protected override void Draw(GameTime gameTime) { graphics.GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here spriteBatch.Begin(SpriteBlendMode.AlphaBlend); mySprite1.Draw(spriteBatch); mySprite2.Draw(spriteBatch); spriteBatch.End(); base.Draw(gameTime); } Xong rùi, F5 nào J .
  18. Bài 3: INPUT cho OBJECT b ng MOUSE và KEYBOARD Bài3 này chúng ta s d ng thu t tóan KT va ch m khác, đã nói qua lession 2 B n có th s d ng project c a lession trư c + m t và s a đ i đây: Ph n I: t l p clsSprite: 1.chung ta không c n thu c tính center và radius n a. 2.S d ng hàm va ch m: public bool Collides(clsSprite otherSprite) { // check if two sprites intersect if (this.position.X + this.size.X > otherSprite.position.X && this.position.X < otherSprite.position.X + otherSprite.size.X && this.position.Y + this.size.Y > otherSprite.position.Y && this.position.Y < otherSprite.position.Y + otherSprite.size.Y) return true; else return false; } Hàm này tr v false n u 2 sprite (gi ng lession 2) không va ch m và ngư c l i s tr v true. Hàm đã nói lession2. Các hàm Move() và Draw() không thay đ i. Ph n II : t l p Game1.cs 1.khai báo: sau class Game1:Microsoft.Xna.Framework.Game; Chúng ta c n 2 sprite như lession trư c. M c Load content t i đ h a cho các sprite và thi t l p v n t c cho sprite1, còn sprite2 không c n thi t l p t c đ (velocity) vì chúng ta s đi u khi n nó t mouse ho c keyboard. Khai báo: public class Game1 : Microsoft.Xna.Framework.Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; // Sprite objects clsSprite mySprite1; clsSprite mySprite2;
  19. Hàm LoadContent: protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); mySprite1 = new clsSprite(Content.Load("ball"), new Vector2(0f, 0f), new Vector2(64f, 64f), graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight); mySprite2 = new clsSprite(Content.Load("ball"), new Vector2(218f, 118f), new Vector2(64f, 64f), graphics.PreferredBackBufferWidth, graphics.PreferredBackBufferHeight); // set the speed the sprites will move mySprite1.velocity = new Vector2(5, 5); } Hàm checkKeyboard() n m trong hàm Update() s có nhi m v ki m tra phím đc nh n trong thg i gian ch y game. Nói chung cái j c n kt trong khi run game đ u put trong hàm Update() này. Chúng ta ĐK sprite2 protected void checkKeyboard() { KeyboardState keyboardState = Keyboard.GetState(); Kh i t o bàn phím if (keyboardState.IsKeyDown(Keys.Up)) mySprite2.position += new Vector2(0, -5); V trí thay đ i khi nh n xu ng (press) v i t a đ thay đ i là 5, tùy theo h ong phím mũi tên mà t a đ thay đ i thích h p b n c n nh tr c t a đ c a XNA là h Oxy v i tâm O n m trên góc trên cùng bên trái b n, Ox // m t đ t và Oy Vuông góc m t đ t. if (keyboardState.IsKeyDown(Keys.Down)) mySprite2.position += new Vector2(0, 5); if (keyboardState.IsKeyDown(Keys.Left)) mySprite2.position += new Vector2(-5, 0); if (keyboardState.IsKeyDown(Keys.Right)) mySprite2.position += new Vector2(5, 0); if (mySprite1.Collides(mySprite2)) Hàm mySpite1.Collides s xác đ nh va ch m v i sprite2 tr v true n u có. { mySprite1.velocity *= -1; Đ o chi u chuy n đ ng c a sprite1 }
  20. } } Ti p là m t hàm đi u khi n sprite2 b ng mouse, khi ch y 1 ho c 2 đi u đc nhưng t t nh t b n ch n l y 1 trong 2 hàm cho đ l n x n. protected void checkMouse() { // Hàm l nh s giúp sprite2 di chuy n đ n t a đ c a mouse if (mySprite2.position.X < Mouse.GetState().X) mySprite2.position += new Vector2(5, 0); if (mySprite2.position.X > Mouse.GetState().X) mySprite2.position += new Vector2(-5, 0); if (mySprite2.position.Y < Mouse.GetState().Y) mySprite2.position += new Vector2(0, 5); if (mySprite2.position.Y > Mouse.GetState().Y) mySprite2.position += new Vector2(0, -5); Vector2 là 1 c p bi n nghĩa là khi s d ng vector ta cũng ph i dùng v i 1 c p giá tr . if (mySprite1.Collides(mySprite2)) { mySprite1.velocity *= -1; } } Trong file m u có thêm hàm cho tay c m c a Xbox rung, nhưng trong bài vi t mình remove r i, vì hi n t i chưa có con Xbox nào đ test c J . Xong r i đ y, F5 và th con chu t hay bàn phím đi nào . Lưu ý , file m u có 2 code cho vi c control b ng mouse hay keyboard, mouse đang ph n ghi chú (t c là có // trư c câu) mu n test các b n enable đo n code cho mouse đó là đc, (khi đó nên disable code cho keyboard cho d th y)
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
4=>1