XNA là một công nghệ làm game của microsoft phát triển.
nó hướng đến đối tượng sử dụng là các học sinh, sinh viên và những người đam mê lập trình game...
Bản XNA 3.0 yêu cầu bạn phải có visual studio 2008 trở lên (bạn có thể down bản Express 2008 SP1) tại trang web của microsoft và bộ XNA 3.0 (hoàn toàn miễn phí). Do XNA sử dụng C# nên bắt buộc bạn phải có nền tảng C# tốt. nếu chỉ làm game đơn giản thì bạn nắm vững phần lập trình hướng đối tượng của C# là ok! Sau khi cài đặt XNA, nó sẽ tích hợp trực tiếp vào visual studio C# , bạn có thể chọn new project => XNA 3.0 Window game. XNA có 1 ưu điểm là viết game đc cho Xbox, Zune game vẫn chạy trên HĐH Window mobile mấy cái này quan trọng lắm nhé, nếu bạn muốn kiếm tiền từ việc viết game thì Xbox là môi trường hấp dẫn ko thua PC. Nếu game bạn viết hay thì có thể mang lên chợ game XBox của microsoft mà bán cho những người chơi game khác.
1. Game và những điều cần lưu ý
Gốc gác của XNA là 1 class được xây dựng , chính là Microsoft.Xna.Framework.Game (gọi tắt là Game) Bạn sẽ thấy 1 file là program.cs sẽ run cái file này và nó chính là file chứa toàn bộ mã nguồn chính để chạy game, nó bao gồm mọi thành phần của game, thường thì chúng ta cần 1 thể hiện của class Game là đủ.
Trong class game chính của bạn (đc kế thừa từ Game) sẽ thấy có rất nhiều method mà Game cho phép bạn override: initilize(), Update() ...
Tuy nhiên khởi đầu cho việc lập trình là khai báo biến, bạn nên khai báo các biến như là Player, hay Enemy... nhiều Enemy thì có thể tạo 1 class chứa toàn bộ tụi nó gọi là Enemy Manager chả hạn, nếu bạn có nhiều màn trong game thì chúng ta khai báo player , Enemy trong từng màn (dùng GameCompoment - sẽ nói sau) và khai báo màn ở file game chính (như mặc định là Game1.cs đó)
Bạn có thể cấp dữ liệu về một thứ dùng chung nào đó cho các GameCômpoment bằng cách dùng service:
- CODE:
Services.AddService(typeof(SpriteBatch), spriteBatch);
GameCompoment sẽ có giá trị của spriteBatch mà dùng cho 2D graphic ở Draw method
Tiếp đến bạn có method Initilize() nó sẽ được gọi trước Update hay Draw method, bạn thiết lập các giá trị cơ bản như: chạy nhạc nền hay tùy chọn full màn hình thiết lập cho Enemy và player nếu có...
LoadContent là method giúp bạn load tài nguyên từ thư mục Content (theo mặc định sẽ là thư mục gốc chứa tài nguyên). Cú pháp để load khá đơn giản. thực ra bạn load ở đâu cũng đc nhưng thường là sau khi Init và khi đã bắt đầu chạy game (vào Update) thì chả ai lại load lại content cả, nó sẽ có thể gây ra những lỗi nghiêm trọng
Update là method có nhiệm vụ duyệt tất cả các thành phần của game, KT điều kiển để Update cho game (VD tốc độ của object là 1, sau 1 lần update , tọa độ của nó sẽ cộng thêm bởi 1) Khi dùng Update bạn nên cẩn thận đừng để quá nhiều object Update 1 lúc game sẽ rất lắc. bạn nên KT điều kiện mà sẽ Update cho object (VD như chỉ Update cho những Object nằm trong vùng nhìn thấy của camera khi làm game 3D) Theo mặc định thì XNA update 60 lần 1 giây bạn có thể tăng giảm con số này tùy thix cho phù hợp với game và sức chịu đựng của cái máy bạn: code dưới đây làm XNA update 100 lần 1 giây
Draw Method là cái bạn cần chú ý sau cùng, nó cũng hết sức quan trọng vì mọi thứ bạn nhìn thấy trong game đều đc đưa lên ở đây . tất nhiên điều này là ko bắt buộc bạn có thể để nó trong Update, tuy nhiên XNA đã tạo sẵn cho chúng ta rùi, ngu gì ko sài và làm chương trình đơn giản hơn? Draw cũng đc "update" như ở Update() method nhưng chỉ là khi có sự thay đổi thích hợp liên quan đến Update method nghĩa là bạn cũng KT ĐK đc ở đây nhưng chỉ là để Draw object cho thix hợp thôi, còn về game lôgic thì để ở Update() là hay nhất
Bạn có thể thắc mắc về mấy chữ Base trong môi method. Nhiệm vụ của chúng rất đơn giản thôi, đó là gọi các method tương ứng của các gamecompoment trong game (nếu có) ví dụ như Update Method (sau khi Update cho Game1.cs xong, phần Base.Update(gameTime) sẽ update cho tất cả các GameCompoment đã đăng ký (khởi tạo và added vào mảng Compoments của class Game1.cs)
2.GameCompoment và DrawableGameCompoment
Chúng là những phần tạo lên 1 game hoàn chỉnh đc viết từ XNA. Bạn sẽ thấy chúng luôn có một biến đc nhập vào, đó là game và khi đó mỗi compoment sẽ có sẵn một biến tên là Game (nó liên quan trực tiếp) đến game1.cs . VD bạn có thể thêm GameCompoment object vào game chính như sau:
Game.Compoments.Add(object);
Drawable cũng như GameCompoment, cái khác là nó có khả năng Draw mà ko cần thêm code ở game chính làm game code của chúng ta đơn giản đi rất nhiều. GameCompoment dành cho những thứ ko cần draw như camera, light, materials, input ...
Biến Game thực sự rất hữu ích, khi mà bạn cần các giá trị từ game chính (VD: Game.GraphicDevice - nếu ko có nó thì đố bạn tìm được giá trị aspectRatio mà làm ko gian chiếu phối cảnh khi viết game 3D)
Ngoài ra nó có thể nhận giá trị mà Game chính truyền cho thông qua service, theo như VD phần 1:
- CODE:
spriteBatch = Game.Services.GetService(typeof(SpriteBatch)) as SpriteBatch;
nếu bạn dùng Drawable, bạn sẽ dùng cái spriteBatch cho Draw method, từ đó Compoment sẽ có khả năng tự Draw ko cần đến kiểu như
object.Draw(SpriteBatch spriteBatch)
chỉ cần base.Draw(gameTime) là đủ để đưa tất cả DrawableGameCompoment là xong!
Tất cả những thứ liên quan đến service tốt nhất bạn sờ đến nó ở initilize() lúc này init của game chính đã chạy và biến truyền dữ liệu đó ko bị null, bạn sẽ ko mất thời gian debug mấy lỗi vớ vẩn như thế
Ngoai ra, hai thuộc tính của GameCompoment là Enable và Visiable, nếu chúng là false thì trong phần Base ở các method Update và Draw trong class Game chính sẽ ko chạy (tức là nó ko hề hoạt đông và ko nhìn thấy)
Source:http://www.mediafire.com/?g2rm20znqjyNguồn: HUYETSAT - XVNA.FORUMB.BIZ
No comments:
Post a Comment