Hiện nay , với sự phát triển mạnh mẽ của khoa học – kĩ thuật, đặc biệt là các thiết bị di động, hàng loạt các Smart Phone được các nhà sản xuất điện thoại cho ra đời. Đi đôi với chúng là các hệ điều hành dành cho điện thoại di động : IOS, Android, Windows Phone…Việc xây dựng các ứng dụng cho các hệ điều hành trên là rất mới mẻ và đầy tiềm năng.
Trang 1LỜI CẢM ƠN
Sau thời gian học tập và rèn luyện tại khoa Công nghệ thông tin, trường Đại học công nghệ thông tin và truyền thông - Đại học Thái Nguyên Đến nay em
đã kết thúc khoá học 5 năm và hoàn thành đồ án tốt nghiệp Để có được kết quả này em xin chân thành cảm ơn:
Ban chủ nhiệm khoa Công nghệ thông tin, trường Đại học công nghệ thông tin và truyền thông - Đại học Thái Nguyên cùng các thầy cô giáo trong khoa đã giảng dạy, quan tâm và tạo điều kiện thuận lợi để chúng em học tập và rèn luyện trong suốt thời gian theo học tại trường
Thầy giáoTh.S Trần Văn Khánh - Giảng viên trường Đại học công nghệ thông tin và truyền thông Thái Nguyên đã giúp đỡ em trong quá trình học tập và đặc biệt là trong suốt thời gian làm đồ án tốt nghiệp
Em cũng xin gửi lời cảm ơn tới gia đình, bạn bè, những người đã động viên, giúp đỡ em rất nhiều trong thời gian học tập và làm đồ án tốt nghiệp
Trang 2LỜI CAM ĐOAN
Đồ án tốt nghiệp là sản phẩm tổng hợp toàn bộ các kiến thức mà sinh viên
đã học được trong suốt thời gian học tập tại trường đại học Ý thức được điều đó, với tinh thần nghiêm túc, tự giác cùng sự lao động miệt mài của bản thân và sự hướng dẫn tận tình của thầy Trần Văn Khánh em đã hoàn thành xong đồ án tốt nghiệp của mình
Em xin cam đoan nội dung đồ án của em không sao chép nội dung cơ bản
từ các đồ án khác và sản phẩm của đồ án là của chính bản thân em nghiên cứu xây dựng lên Mọi thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước hội đồng bảo vệ
Trang 3MỤC LỤC
Trang 4DANH MỤC BẢNG BIỂU VÀ HÌNH VẼ
Trang 5LỜI NÓI ĐẦU
Hiện nay , với sự phát triển mạnh mẽ của khoa học – kĩ thuật, đặc biệt là các thiết bị di động, hàng loạt các Smart Phone được các nhà sản xuất điện thoại cho ra đời Đi đôi với chúng là các hệ điều hành dành cho điện thoại di động : IOS, Android, Windows Phone…Việc xây dựng các ứng dụng cho các hệ điều hành trên là rất mới mẻ và đầy tiềm năng
Nắm bắt được nhu cầu thực tế đó , em đã chọn đề tài : Xây dựng ứng dụng game FISH 2D cho Windows Phone Đây là một trò chơi mang tính chất
giải trí được xây dựng trên hệ điều hành Windows Phone 7, ai cũng có thể chơi Trò chơi này sử dụng công nghệ XNA cho Windows Phone Mục đích nghiên cứu của đề tài là em muốn nắm bắt được công nghệ để xây dựng một trò chơi cho
hệ điều hành Windows Phone , tiếp tục hoàn thiện ứng dụng của mình để có thể giới thiệu tới người dùng thông qua chợ ứng dụng của Windows Phone là Marketplace Từ đó, em có thể xây dựng được nhiều ứng dụng hơn cho hệ điều hành Windows Phone
Sinh viên thực hiện
Vi Thanh Hải
Trang 6Chương 1.
TỔNG QUAN VỀ HỆ ĐIỀU HÀNH WINDOWS PHONE VÀ XNA GAME STUDIO
1.1 Tổng quan về hệ điều hành Windows Phone.
1.1.1 Giới thiệu về hệ điều hành di động Windows Phone.
Windows Phone 7 là thế hệ kế tiếp của dòng điện thoại chạy hệ điều hành Microsoft Windows Mobile Windows Phone 7 được phát triển dựa trên phần lõi là Windows CE 7 giống Zune HD, trong khi các phiên bản trước lại dựa trên Windows CE 5
Như đã nói ở trên, Windows Phone 7 hoàn toàn khác Windows Mobile , khác cả về phần cứng lẫn phần mềm: Giao diện sử dụng dạng lật mở hoàn toàn mới lạ, chú trọng tính năng nhập liệu bằng ngón tay, kết hợp và mở rộng đầy đủ với các thành phần của Zune và Xbox, đòi hỏi cấu hình phần cứng rất khắc khe đối với các đối tác sản xuất Ngoài ra, Windows Phone 7 được hỗ trợ cả Outlook lẫn Office và Microsoft sẽ cấp giấy phép cho một số lượng lớn các nhà sản xuất phần cứng thứ 3 Tuy nhiên, Microsoft vẫn không tự mình sản xuất một thiết bị Windows Phone 7 nào Đích nhắm của Microsoft là một nền tảng có khả năng
"tối ưu hóa cuộc sống", Windows Phone 7 được lấy ý tưởng hư cấu từ một cặp đôi 38 tuổi tên Anna và Miles vốn tượng trưng cho những người dùng tiềm năng: những người cần phải hoàn tất công việc của mình trên điện thoại nhưng vẫn muốn giải trí bằng cách chơi game và không muốn lãng phí thời gian với quá nhiều thao tác phức tạp
1.1.1.1 Phần cứng
Một phần tạo nên sự khác biệt của Windows Phone 7 chính là Microsoft đang muốn chiếm một vai trò lớn hơn trong việc quyết định phần cứng nào được cho phép để chạy hệ điều hành này Microsoft đã đặt ra những nguyên tắc cơ bản cũng như những yêu cầu khắc khe đối với các thiết bị chạy Windows Phone 7 , nhưng điều này không có nghĩa sản phẩm sẽ thiếu đi sự đa đạng Những thiết bị khác nhau sẽ có những tính năng khác nhau chẳng hạn như bàn phím vật lý,
Trang 7camera trước, v.v tất cả đều góp phần tạo nên một nền tảng Windows Phone 7 vững chắc.
1.1.1.2 Phần mềm
Về giao diện: Giao diện Metro UI (nay đã được đổi tên thành Moderm
UI ) trên Windows Phone 7 là giao diện biến hóa nhất từ trước đến nay Với Windows Phone 7 , bạn chỉ cần nhấn tiếp tục và tiếp tục, đặc điểm này đủ để nói lên tính khác biệt giữa Windows Phone 7 và các hệ điều hành khác không chỉ riêng Windows Mobile Microsoft đã cố gắng phát triển những phương thức mới
để điều khiển một thiết bị Windows Phone 7 khiến nó không giống với những thiết bị khác có mặt trên thị trường: Không có hệ thống biểu tượng, không có danh mục đổ xuống …
Về nhập liệu: Microsoft hoàn toàn làm chủ tính năng nhập liệu qua bàn
phím cảm ứng Điều này có nghĩa bạn sẽ không thể cài đặt thêm một bàn phím nào khác trên Windows Phone 7 Nhưng có thể nói, bàn phím ảo của Windows Phone 7 khá tốt và thậm chí còn có một nút riêng (bên cạnh nút Space) để hiển thị một bảng chứa các khuông mặt biểu lộ cảm xúc (Emoticon) khi bạn cập nhật trạng thái trên mạng xã hội
Trang 81.1.2 Ưu điểm của hệ điều hành Windows Phone.
Mặc dù là "bá chủ" trên thị trường hệ điều hành dành cho máy tính nhưng Microsoft vẫn luôn tìm cách để thực hiện điều tương tự với "mảnh đất" màu mỡ smartphone Và Windows Phone 7 chính là "cú đấm" quyết định mà người khổng lồ công nghệ này đưa ra để tấn công các đối thủ như iOS của Apple hay Android của Google
Hình 1.2 Một số thiết bị chạy Windows Phone
Vậy Windows Phone 7 có gì vượt trội so với các hệ điều hành di động khác ?
Trang 91 Live Tiles - Luôn luôn cập nhật
Hình 1.3: Giao diện Panorama của Windows Phone
2 Xbox live - Kết nối với thế giới Game
Hình 1.4: Luôn luôn sẵn sàng trong game với Xbox LIVE
Trang 113 Hub - Trung tâm giải trí đa phương tiện
Hình 1.5: Trình quản lý hình ảnh trong Windows Phone
4 Camera - Đáp ứng mọi nhu cầu
Hình 1.6: Giao diện sử dụng và cài đặt Camera
Trang 125 Lock screen - Đa dạng thông tin
Hình 1.7: Giao diện Lock Screen
6 Luôn cân bằng mọi thứ
Hình 1.8: Android – Windows Phone – iOS
Sẽ không khó để nhận thấy Windows Phone 7 là sự tổng hòa các ưu điểm của iOS và Android:
Có biểu tượng bố trí theo phong cách của iOS nhưng có nội dung màn hình động của Android
Hiển thị Live Tiles cung cấp thông tin nhiều hơn iOS, nhưng không quá thừa thải như Android
Trang 13 Mã nguồn Windows Phone 7 không phải kiểu ứng dụng đóng như iOS nhưng cũng không phải là kiểu mở như Android.
Windows Phone 7 là một lựa chọn hoàn hảo cho những người muốn một cái gì
đó khác với iOS, nhưng không phải quá khác biệt so với Android
7 Điện toán đám mây - Hội tụ công nghệ trên một thiết bị.
Hình 1.9: Skydriver
1.1.3Thị phần thị trường di động ngày nay.
IDC châu Âu đã công bố những con số thống kê về thị trường nền tảng di động tại khu vực Bên cạnh sự tăng trưởng của Android và iOS thì Windows Phone cũng bắt đầu có những tín hiệu đáng mừng Giám đốc nghiên cứu bộ phận
di động của IDC tại châu Âu - Francisco Jeronimo cho biết: trong quý đầu năm
2012, doanh số điện thoại WP bán ra đã tăng 156% so với cùng kỳ năm ngoái (1,14 triệu thiết bị), qua đó nâng thị phần của WP từ 2,2% lên 4,1%
Bên cạnh đó, iOS và Android vẫn tăng trưởng đều đặng, đáng chú ý nhất
là Android Trong khi thị phần của iOS chỉ tăng nhẹ từ 21 lên 25% thì Google với 15,5 triệu thiết bị được bán ra đã nhảy vọt lên con số 55% thị phần
Tin vui cho Microsoft là hiện nay hơn 100.000 ứng dụng đã được phát hành trên Marketplace với 313 ứng dụng được đưa lên mỗi ngày Tại thời điểm viết bài, 100.145 ứng dụng đã được công bố Trong số này, 26.493 đã được đưa lên vào
Trang 14trong ba tháng qua, và 9391 trong tháng vừa qua Những ứng dụng này đến từ hơn 23.825 nhà phát hành khác nhau.Một vài điểm đáng chú ý trong việc này:
100,145 ứng dụng được đưa lên WP trong vòng 20 tháng
WP đạt 100,000 ứng dụng nhanh hơn Android (24 tháng) nhưng chậm hơn iOS (16 tháng)
Microsoft đã mất 14 tháng và chỉ đạt được 50,000 ứng dụng nhưng sau đó trong vòng 5 tháng đã nhanh chóng đạt được 100,000
Hình 1.10 Thống kê ứng dụng của Windows Phone theo thời gian
Kho ứng dụng của Microsoft tiếp tục chứng tỏ việc quan tâm tới người dùng khi có tới 67% ứng dụng miễn phí
Trang 15Hình 1.11 Thị phần ứng dụng Free so với các ứng dụng khác.
Cuối cùng là biểu đồ số tháng mà các OS đạt được 100,000 ứng dụng
Hình 1.12 biểu đồ số tháng mà các OS đạt được 100,000 ứng dụng
1.1.4 Giới thiệu về Market Place và kho ứng dụng Windows Phone Store.
Sau gần 2 năm ra mắt, Windows Phone ngày càng tạo được lòng tin trong vào người tiêu dùng Điều này không chỉ vì Windows Phone nhẹ nhàng, phá cách
mà còn bởi Windows Phone có một kho ứng dụng vô cùng phong phú Khởi đầu chỉ có 3000 ứng dụng cùng khoảng 15000 nhà phát triển nhưng đến nay đã đạt hơn 100000 ứng dụng và hơn 100000 nhà phát triển
Để vào Marketplace, bạn có thể chọn Marketplace từ màn hình chính (Start Screen) hoặc từ danh sách các ứng dụng.Giao diện của Marketplace gồm 5
Trang 16- Tab đầu tiên chứa danh mục gồm: Bộ ứng dụng độc quyền của hãng sản xuất điện thoại (Nokia, HTC, Samsung,…), applications, games, music, podcasts.
- Tab applications chứa tất cả các ứng dụng
- Tab games tổng hợp tất cả các game hiện có trên Marketplace
- Tab music cho phép người dùng mua nhạc có bản quyền
- Tab cuối cùng hiển thị ứng dụng đặc biệt của ngày hôm đấy
Hiện tại kho ứng dụng của Windows Phone (Marketplace) có 67% phần mềm là miễn phí, 10% trả phí và cho dùng thử, 23% còn lại có trả phí Các ứng dụng, trò chơi nổi tiếng đã có mặt trên Marketplace nhằm thoả mãn nhu cầu kể
cả những khách hàng khó tính nhất như Facebook, Foursquare, IM+, Skype, SkyDrive, Angry Birds, Ninja Fruit,…
Cùng với sự ra mắt của Nokia Lumia thì Windows Phone như hổ thêm cánh với kho ứng dụng độc quyền phong phú, đáp ứng nhu cầu của những người dùng khó tính nhất như Camera Extras (Ứng dụng chụp ảnh), Nokia Drive (Bản
đồ, dẫn đường), Nokia Maps, Contacts Transfer (chuyển danh bạ từ điện thoại cũ vào Nokia Lumia),…
1.2 XNA Game Studio
1.2.1 XNA là gì ?
XNA Game Studio là công nghệ mới hỗ trợ rất tốt cho việc lập trình game trên PC, Xbox và Zune XNA Game Studio 3.0 là 1 IDE mở rộng sử dụng nền XNA 3.0 XNA 3.0 cung cấp cho chúng ta một thứ có thể gọi là 1 bộ engine game XNA và khả năng tùy biến , mở rộng để làm thành 1 game của riêng mình Một số đòi hỏi khi sử dụng XNA Game Studio 3.0:
· Home Premium Edition
·Business Edition
Trang 17· Enterprise Edition
· Ultimate Edition
Phải cài đặt DirectX 9.0c , card màn hình ít nhất phải hỗ trợ Shader model 1.1 XNA Game Studio 3.0 chạy trên nhiều phiên bản của Microsoft Visual Studio 2008 Để cài đặt XNA ,trước tiên bạn phải cài đặt Microsoft Visual Studio 2008 Standard Edition hoặc là bản cao hơn (phải có hỗ trợ ngôn ngữ C#) hoặc Visual C# 2008 Express Edition
XNA Framework chia làm 3 thành phần cốt lõi:
- Engine Đồ Họa XNA trong Microsoft.Xna.Framework.dll
- Mô Hình Ứng Dụng Game XNA trong Microsoft.XNA.Framework.Game.dll
- Kênh Nội Dung XNA trong Microsoft.Xna.Framework.Content.Pipeline.dll
1.2.2 Một số thành phần cơ bản của XNA
1.2.2.1 Input Devices
Thiết bị vào là những thiết bị giúp người chơi điều khiển nhân vật của mình trong trò chơi Thông qua thiết bị vào, người chơi có thể hoá thân thành một nhân vật trong trò chơi Ví dụ, khi chơi các trò chơi đua xe, quả thật rất là hồi hộp Khi
đó, người chơi phải xem mình chính là người lái chiếc xe đó và xem như mình đang thật sự điều khiển nó ở ngoài thế giới thật vậy Mỗi khi nhân vật bị té ngã hay
va chạm với ai đó thì người chơi cũng có cảm giác giống như vậy, cũng vui, buồn, giận…
Hiện tại có nhiều thiết bị vào để điều khiển trò chơi như Bàn phím, Chuột (cho Windows), GamePad cho máy Xbox360,… Và XNA hỗ trợ cả ba loại trên
- GamePad cho máy Xbox360
GamePad là một điều khiển chuẩn của Xbox 360
XNA cung cấp cho chúng ta những lớp hỗ trợ cho phép chúng ta dễ dàng xác định trạng thái của GamePad
Sử dụng lớp GamePad làm đại diện cho thiết bị gamepad tương ứng của Xbox và lớp GamePadState để biểu diển các trạng thái của gamepad
* Kiểm tra xem gamepad đã kết nối hay chưa?
Trang 18Để kiểm tra xem gamepad đã kết nối hay chưa, ta sử dụng thuộc tính GetState().IsConnected của lớp GamePad Thuộc tính này có giá trị kiểu bool, nếu là true thì gamepad đã được kết nối, ngược lại là chưa kết nối.
if ( GamePad.GetState( PlayerIndex.One ).IsConnected ){
//Xử lý khi Gamepad đã được kết nối
}
else{
//Xử lý khi Gamepad chưa được kết nối
}
* Kiểm tra xem nút nào trên gamepad đang được ấn
Sử dụng phương thức GamePadState.IsButtonDown(Buttons btn) để kiểm tra Nếu đầu ra là true thì nút btn này đang được ấn, ngược lại là không được ấn.Hoặc sử dụng cách sau:
Thường sử dụng phương thức GetState
Phương thức GetState(PlayerIndex index) trả về trạng thái các nút gamepad của người chơi có thứ tự index, và được đóng gói trong một đối tượng của lớp GamePadState
- Lớp GamePadState:
Các thuộc tính thường dùng:
+ Buttons: là một cấu trúc đại diện các nút của gamepad (GamePadButtons)+ DPad: là biến đại diện cho lớp GamePad, thể hiện dãy phím điều khiển hướng (Lên - Up, Xuống - Down, Trái - Left, Phải - Right)
Các phương thức hay dùng:
Trang 19+ bool IsButtonDown(Buttons btn), bool IsButtonUp(Buttons btn): kiểm tra xem nút btn đang được ấn (hay thả lên).
+ Bool IsConnected: kiểm tra xem thiết bị vào có đang được kết nối hay không+ ThumbSticks: là biến kiểu GamePadThumbStick, đại diện cho hai thanh điều khiển trên gamepad Cấu trúc này dùng để biểu thị vị trí dạng Vector2 của của các thanh điều khiển
- Bàn phím
Bàn phím, với nhiều phím tốt nhất cho các mô phỏng phức tạp, với nhiều chức năng, hoặc khi gõ văn bản là cần thiết nhưng bàn phím không phải là một điều khiển cho các chuyển động chính xác.Nếu bàn phím của người dùng kết nối thông qua cổng USB, nó có thể được dùng cho hệ thống Windows hoặc Xbox 360
XNA cung cấp cho chúng ta những lớp hỗ trợ cho phép chúng ta dễ dàng xác định trạng thái của những thiết bị vào Chúng ta xác định trạng thái của bàn phím bằng cách khai báo biến chứa trạng thái của bàn phím và gọi phương thức GetState của đối tượng Keyboard Chúng ta có thể biết được phím đang được nhấn hay thả
private KeyboardState keyboardState ;
Thiết bị vào này chỉ cung cấp cho Windows Vì vậy nếu muốn triển khai trò chơi trên Xbox 360 chúng ta cần đặt mã nguồn trong cặp kiểm tra hướng biên dịch (compilation directive check) XBOX360 Chúng ta sẽ tạo biến thành viên
Trang 20tiền kiểm tra bên trong lớp xử lý phím Chúng ta cần thiết lập một biến thành viên lưu trạng thái chuột trước và một biến khác lưu trạng thái chuột hiện tại.
#if !XBOX360
Private MouseState mouseState;
Private MouseState prevMouseState;
#endif
* Kiểm tra nút nào đang ấn?
Sử dụng phương thức GetState() của lớp Mouse và giá trị trả về là một đối tượng của lớp MouseState Sau đó, khai thác của thuộc tính của lớp MouseState
để sử dụng
* Lấy vị trí của chuột:
Để lấy toạ độ hiện thời của chuột, ta cũng phải khai báo để lấy được trạng thái hiện thời của chuột bằng phương thức Mouse.GetState() Để lấy toạ độ chuột, dùng thuộc tính MouseState.X hoặc MouseState.Y
* Cho phép hiện con trỏ chuột trong trò chơi:
Dùng thuộc tính Game.IsMouseVisible để qui định Nếu thuộc tính này được gán là true, thì con trỏ chuột sẽ được hiển thị, ngược lại thì không
1.2.2.2 Đồ hoạ 2D trong XNA
- Hệ tọa độ 2D
Có thể ai cũng biết về hệ tọa độ 2D trong hình học Nhưng hệ tọa độ để tạo trò chơi thì khác Điểm khác nhau giữa hệ tọa độ ở trên và hệ tọa độ tạo trò chơi 2-D (được gọi là hệ tọa độ màn hình)
Hình 1.13 Hệ toạ độ 2D
Trang 21XNA framework hỗ trợ chúng ta thao tác trên đối tượng 2D một cách dễ dàng.
-Một số định nghĩa
* Sprite
Sprite là một hình ảnh thường dùng để hiển thị thông tin như: thanh trạng thái của đối tượng, số mạng sống, chú thích, điểm số Để vẽ sprite, chúng ta phải tạo đối tượng Texture2D Ta có thể hiệu chỉnh sprite như: tạo màu sắc, thực hiện phép quay, phép tỉ lệ bằng phương thức Draw Sau khi vẽ sprite, gọi phương thức End trước khi gọi phương thức Present
* Gốc Sprite (Sprite Origin)
Khi vẽ sprite, gốc sprite là khái niệm quan trọng Gốc là một điểm cụ thể trên sprite được mặc định ở góc trên bên trái của sprite hoặc tại tọa độ (0,0) Phương thức Draw vẽ gốc của sprite tại vị trí được chỉ định trên màn hình
Ví dụ: nếu ta vẽ pixel sprite 50x50 tại tọa độ (400,200) mà không xác định gốc, góc trên bên trái của sprite sẽ là điểm (400,200) Nếu dùng điểm trung tâm của sprite 50x50 với gốc là (25,25), để vẽ sprite tại vị trí đó, ta phải cộng thêm tọa độ gốc Trong trường hợp này, vị trí là (425,425) và gốc là (25,25)
* Độ sâu Sprite (SpriteDepth)
Sprite cũng có khái niệm độ sâu Khi vẽ sprite, chúng ta có thể xác định
độ sâu giữa 0 và 1 (đây là một số thực) Sprite vẽ tại độ sâu 0 nằm “ trước ” màn hình và sẽ phủ vài sprite vẽ ở độ sâu thấp hơn Sprite ở độ sâu 1 nằm “ sau ” màn hình và sẽ bị phủ bởi những sprite vẽ ở độ sâu nhỏ hơn 1
* Sprite Batching
Thông thường, đối tượng SpriteBatch không thay đổi vài trạng thái tạo hoặc
vẽ sprite cho đến khi gọi phương thức End Điều này được gọi là chế độ Deferred
Ở chế độ Deferred, SpriteBatch lưu các thông tin mỗi khi gọi phương thức Draw cho đến khi gọi phương thức End Khi gọi phương thức End, SpriteBatch thay đổi các thiết bị cài đặt đồ họa và vẽ mỗi sprite một loạt Sau đó, phương thức End trả
về những thiết lập ban đầu nếu ta chỉ định SaveStateMode.SaveState
Trang 22Nếu gọi phương thức Begin, xác định SpriteSortMode.Immediate, nó tạo chế độ Immediate Trong chế độ Immediate, ngay lập tức SpriteBatch thay đổi trạng thái thiết bị đồ họa để bắt đầu vẽ sprite Sau đó, mỗi lần gọi phương thức Draw, nó vẽ sprite bằng cách sử dụng các thiết bị cài đặt hiện tại Phương thức End trả về những thiết lập thiết bị ban đầu nếu ta chỉ định SaveStateMode.SaveState.
Ở chế độ Immediate, một khi gọi phương thức Begin trên một thể hiện (instance) SpriteBatch, chúng ta không được gọi nó ở thể hiện SpriteBatch khác, cho đến khi gọi phương thức End cho SpriteBatch đầu tiên
Chế độ Deferred chậm hơn chế độ Immediate, nhưng nó cho phép nhiều thể hiện của SpriteBatch chấp nhận phương thức Begin và Draw mà không cản trở lẫn nhau
Sprite Blend Modes:
Chế độ trộn có thể tạo ra AlphaBlend, Additive, None Chế độ trộn (blend) mặc định là AlphaBlend
Sprite Sort Mode:
Chế độ sắp xếp quyết định các ảnh (sprite) được vẽ hiển thị trên hình ảnh Trước đây, các nhà phát triển trò chơi phải cẩn thận để đảm bảo việc các hình ảnh hiển thị trên màn hình phải được sắp xếp, pha trộn màu nền và bề mặt một cách chính xác Ngày nay, với sự hiểu biết về XNA sẽ giúp chúng ta làm công việc này đơn giản hơn.Các chế độ sắp xếp có thể thiết lập: BackToFront, Deferred, FrontToBack, Immediate và Texture
- Chế độ sắp xếp mặc định là Deferred khi chúng ta gọi phương thức Begin không có tham số
- Immediate cập nhật việc thiết lập thiết bị đồ họa ngay lập tức khi phương thức Begin được gọi
- Chế độ BackToFront và FrontToBack Khi chúng ta vẽ ảnh, chúng ta có thể thiết lập độ sâu của ảnh Giá trị này là một số thực giữa 0.0 và 1.0
+ BackToFront dùng cho hình ảnh trong suốt
+ FrontToBack dùng cho hình ảnh không trong suốt
- Chế độ Texture sẽ kiểm tra tất cả hình ảnh được yêu cầu và sắp xếp chúng
Trang 23* Sprite Transformation MatricesXNA Game Studio bao gồm một tính năng cho hàng loạt sprite, khả năng xác định chuyển đổi ma trận có thể áp dụng cho mỗi sprite trước khi vẽ Việc chuyển đổi ma trận có thể được kết hợp với phép tịnh tiến (translation), phép xoay (rotation), hoặc phép tỉ lệ (scaling) ma trận nhân với nhau thành một ma trận đơn Đây là ma trận kết hợp với các tham số vị trí, phép xoay, phép tỉ lệ và chiều sâu của sprite để cung cấp cho phương thức Draw Bởi vì ma trận cũng áp dụng chiều sâu, sự chuyển đổi tọa độ để làm cho độ sâu sprite lớn hơn 1.0 hoặc nhỏ hơn 0.0 sẽ làm sprite biến mất.
* Sprite Fonts
XNA Game Studio cho phép vẽ văn bản bằng cách sử dụng SpriteBatch Phương thức DrawString sẽ vẽ văn bản trên màn hình với vị trí, màu sắc, góc quay, gốc, và hệ số tỉ lệ Phương thức DrawString cũng yêu cầu loại texture của lớp SpriteFont SpriteFont được tạo ra bởi Content Pipeline khi ta thêm một tập tin Sprite Font vào ứng dụng của mình Các tập tin Sprite Font có các thông tin như tên và kích cỡ của phông chữ, và trong đó bao gồm các ký tự Unicode trong texture SpriteFont Khi chạy ứng dụng, một SpriteFont được nạp với ContentManager.Load giống như một đối tượng Texture2D
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 đó)
Trang 24Bạn có thể cấp dữ liệu về một thứ dùng chung nào đó cho các GameComponent bằng cách dùng service:
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
Trang 25Update 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)
1.2.3 Các nền tảng hỗ trợ XNA, ưu nhược điểm của chúng.
Đối với các lập trình viên, khái niệm platform chắc không xa lạ gì Trong thế giới game, platform là yếu tố quyết định đến thị phần của game Bạn có thể nhận ra rằng mỗi loại platform mang theo những đặc tính khác nhau, sức mạnh, điểm yếu cũng khác nhau Việc của chúng ta là nhân sức mạnh của từng platform lên cực điểm và biến yếu điểm của nó thành một kiểu sức mạnh khác
Đối với XNA, có ba loại platform mà nó hỗ trợ
o Ưu thế:
Thông dụng, dễ sử dụng, khả năng tương tác cao
Cực kỳ linh hoạt với các thiết bị ngoại vi và có thể nâng cấp tương đối dễ dàng
Sức mạnh về đồ họa và âm thanh cao
Trang 26 XBox 360 được phát triển hướng vào giao tiếp cộng đồngvà được đánh gia cao hơn PS3 về mặt này.
Ngoài ra, Các thư viện trong framework cung cấp một số lượng lớn các hàm API phục vụ cho các nhu cầu đa dạng của game
Quản lý tài nguyên
XNA framework cung cấp một cơ chế giúp quản lý và sử dụng dễ dàng các tài nguyên như mô hình 3D, hình ảnh 2D, âm thanh, đó là cơ chế content pipeline Để bắt đầu sử dụng một tài nguyên nào đó, bạn chi việc kéo thả tài nguyên đó vào cửa sổ content Đó có thể là các định dạng file của Autodesk, 3D Max, Maya, hay Photoshop, tất cả đều có thể được đưa vào game và sử dụng với cùng 1 cách thức giống nhau Ngoài ra, nếu sử dụng một định dạng mới hay chưa được hỗ trợ, lập trình viên có thể dễ dàng sử dụng các hàm API để lập trình cho content pipeline hiểu được định dạng mới
Lập trình đa nền tảng
XNA framework cung cấp một sức mạnh tuyệt vời để phát triển game trên các sản phẩm của Microsoft Bạn chỉ cần lập trình 1 lần và game của bạn sẽ chạy được trên cả 3 nền tảng Window, Xbox360, June Nếu viết game bằng một công
cụ khác, bạn sẽ phải viết lại game trên 3 lần cho 3 nền tảng
Trang 27 XNA Studio
Sức mạnh của XNA framework được nhân lên gấp đôi khi hỗ trợ cho nó là một IDE hoàn chỉnh và mạnh mẽ Microsoft XNA Studio XNA Studio sau khi được cài đặt sẽ được tích hợp trực tiếp vào phiên bản Visual Studio đang cài trên máy
Công cụ này có 2 phiên bản chính
o XNA Game Studio Professional
o XNA Game Studio Express : miễn phí,phù hợp cho sinh viên, học sinh, những người đam mê phát triển game Download trực tiếp từ trang web của Microsoft
Ngôn ngữ
XNA được hỗ trợ mặc định với C#, một ngôn ngữ mới và rất mạnh Ngoài
ra cũng có thể xử dụng XNA với C++,Delphi,
Stater Kits(Developer Example)
Cộng đồng XNA cung cấp nhiều game dưới dạng "Starter Kits" Đây là những game hoàn chỉnh ( 3D, 2D), đủ các thể loại và không thua gì những game thương mại Quan trọng hơn những game này được cung cấp miễn phí và opensource Người mới học XNA có thể tải về để học về XNA và gamedev Bản thân tôi nhận thấy các bộ starter kit này rất hay và đầy đủ, hiểu và nắm hết các bộ starter kits các bạn sẽ phải bỏ ra một thời gian không nhỏ, nhưng nếu hiểu được hết bạn đã thực sự là chuyên gia về XNA rồi đấy
Tạo cảm hứng để beginner:
Việc tiếp cận với việc phát triển game (game developer) là một con đường đầy dài và lắm chông gai Trước đây, việc tiếp cận với nó không hề đơn giản, những bạn mới bắt đầu sẽ phải bỏ ra một lượng lớn thời gian để tìm hiểu về những thư viện lập trình đồ họa khổng lồ, cách thức sử dụng thư viện, các phép toán số học, hình học phức tạp và điều này đã làm nản lòng không ít những người yêu thích phát triền game
Đến với XNA , bạn được cung cấp hầu hết những thư viện tiện ích, các hàm toán học đa dạng, các phương thức xử lý hình ảnh, âm thành rất tốt Công việc của bạn được rút ngắn đáng kể và bạn có thể dùng thời gian và đầu óc mình
để tập trung cho phần ý tưởng, logic và kiến trúc game
Trang 28Các hình ảnh lớn trong game được tạo nên từ các tile nhỏ Việc chia nhỏ các hình ảnh lớn này thành các tile nhỏ hơn sẽ thuận lợi cho việc lưu trữ và linh hoạt trong việc tạo ra các kiểu hình ảnh đồ họa trong game, sẽ giúp tiết kiệm bộ nhớ rất nhiều và tốc độ chương trình cũng được cải thiện nhờ tốc độ load ảnh.
Việc thay đổi liên tiếp các sprite này với một khoảng thời gian chờ hợp lý giữa các sprite sẽ tạo ra các hình ảnh chuyển động với cảm giác thật Các hình ảnh chuyển động thường thấy trong game, đặc biệt là game 2D như nhân vật di chuyển, nước chảy, hay các
vụ nổ do va chạm, đều có thể được thể hiện bằng cách dùng sprite
Trang 29Hình 2.2 Sprite Sheet -
Frame
Tất cả các thiết bị hiển thị hình ảnh chuyển động hiện nay như TV, monitor… đều dựa trên khả năng lưu ảnh của mắt người Sau khi hình ảnh biến mất mắt của chúng ta còn lưu lại tại vỏng mạc 1/24 giây Vì vậy để tạo các đoạn film người ta chỉ cần thay đổi liên tục các hình ảnh theo tốc độ 24 hình/giây hoặc cao hơn Trong game cũng áp dụng kỹ thuật này để tạo chuyển động và mỗi lần cập nhật màn hình gọi là 1 frame
Map là vùng thể hiện tất cả các đối tượng trong game, một phần hoặc toàn bộ bề mặt của map được hiển thị trên màn hình Map chứa tất cả các đối tượng khác Tất cả các đối tượng chỉ có thể di chuyển trong phạm vi của map
và có mức độ ưu tiên khi xuất hiện trên map khác nhau
Cách tổ chức map trong game là phần rất quan trọng, đối với mỗi game khác nhau lại có các tổ chức khác nhau
- Surface
Surface là khái niệm chỉ một vùng bộ nhớ để lưu dữ liệu hình ảnh Hình ảnh được lưu là một vùng hình chữ nhật, có thể là hình ảnh được load lên từ một file hình ảnh nào đó hoặc là sự tổng hợp của nhiều hình ảnh khác nhau Khi cần các surface có thể được vẽ lên màn hình để hiển thị hình ảnh đồ họa trong game
Trang 30màu nền đồng nhất, khi vẽ chúng lên màn hình ta chỉ cần loại bỏ tất cả các pixel
Có nhiều cách tổ chức map, em xin giới thiệu 2 cách thông dụng là dùng
tile và dùng background Cách tổ chức map dùng background thường được áp
dụng với những game có map lớn hơn nhiều lần cửa sổ hiển thị Một background có kích thước lớn hơn hoặc bằng với cửa sổ hiển thị được vẽ đầu tiên làm hình nền Tất cả những đối tượng khác trong game sẽ được vẽ lên trên background này theo thứ tự ưu tiên
2.1.4 Cuộn map
Cuộn map là kỹ thuật mà hầu hết các game đều có sử dụng Đối với các game có map lớn hơn cửa sổ hiển thị thì cuộn map là điều bắt buộc Cuộn map có thể được hiểu giống như việc di chuyển cửa sổ hiển thị trên map để hiển thị đúng hình ảnh nhân vật trong vùng cửa sổ khi nhân vật di chuyển Map có thể được cuộn theo nhiều hướng, tùy theo
cách thiết kế map, và cũng có nhiều cách để cuộn map
Trang 31Hình 2.5 Sơ đồ thuật toán cuộn background theo chiều ngang từ phải sang trái
Trang 322.1.5 Kiểm tra va chạm
Va chạm là phần không thể thiếu trong game, tùy yêu cầu của mỗi game
mà mức độ xử lý lại khác nhau Đối với các game được xây dựng trên các tile
có cùng kích thước, tọa độ tính theo sprite thì việc xử lý khá đơn giản, chỉ cần kiểm tra tọa độ xem sprite của hai đối tượng cần kiểm tra có nằm cùng trên một ô hay không Đối với các game có các sprite có kích thước khác nhau ta
có thể dựa vào tọa độ của các sprite và kích thước của
sprite để kiểm tra xem chúng có nằm chồng lên nhau hay không để nhận biết va chạm
Hình 2.6 Sơ đồ thật toán kiểm tra va chạm
Trang 33Hình 2.7 Khi chưa xảy ra va chạm
Khi bắt đầu vào xây dựng game, mục tiêu đầu tiên là phải có được ý tưởng
về game sẽ xây dựng Người lãnh đạo đội ngũ phát triển sẽ phải đưa ra được các câu hỏi và trả lời chúng, danh sách các câu hỏi có thể có:
- Thể loại game là gì ?
- Đối tượng chơi game ?
- Nền tảng phát triển, ngôn ngữ xây dựng ?
- Kịch bản và màn chơi sẽ như thế nào ?
Sau khi đã xác định và trả lời các câu hỏi trên, chúng ta sẽ chuyển đến bước tiếp theo, phác thảo sơ bộ và định hình cho game sẽ phát triển !