Tải bản đầy đủ (.docx) (66 trang)

Xây dựng ứng dụng game FISH 2d cho windows phone

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.41 MB, 66 trang )

LỜ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.
1
LỜ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ệ.
2
MỤC LỤC
3
DANH MỤC BẢNG BIỂU VÀ HÌNH VẼ
4
LỜ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
5
Chươ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ý,
6
camera 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.
Hình 1.1 Mô phỏng bàn phím nhập liệu của thiết bị chạy Windows Phone 7
7
1.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 ?
8
1. 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
9
10
3. 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
11
5. 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.
12
 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
13
trong 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í.
14
Hì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
tabs:
15
- 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:
Hệ điều hành:
HỆ ĐIỀU HÀNH PHIÊN BẢN HỖ TRỢ
Microsoft® Windows® XP
·Home Edition
·Professional Edition
·Media Center Edition
·Tablet Edition
Windows Vista® · Home Basic Edition
· Home Premium Edition
·Business Edition
16
· 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?
17
Để 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:
if ( GamePadState.Buttons.<Button_Name> = = ButtonState.Pressed )
{
//xử lý khi nút có tên Button_Name được ấn
}
* Các lớp hỗ trợ:
- Lớp GamePad:
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:
18
+ 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 ;
if ( keyboardState.IsKeyDown ( Keys.<Tên_Phím> ) ) {
// Xử lý khi phím được ấn
}
- Chuột
Chuột, với sự điều khiển chính xác, là cách tốt nhất cho việc chọn các đối
tượng, chẳng hạn như trong một trò chơi chiến lược, hoặc cho di chuyển qua một
viewport. Thiết bị chuột mới có ba nút bổ sung ngoài hai nút trái và phải. Nút bổ
sung sẽ được kích hoạt bằng cách nhấn xuống bánh xe cuộn. Chức năng của
bánh xe cuộn có thể điều khiển thêm hai hướng, nhưng không cung cấp dữ liệu
vào chính xác.
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
19
tiề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
20
XNA 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.
21
Nế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.
22
* Sprite Transformation Matrices
XNA 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
1.2.2.3 Game, Service
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 Game1.cs 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 Game1 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 đó)
23
Bạ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:
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
24
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)

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ợ.
• PC:
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.
o Khuyết điểm:
 Cồng kềnh, đắt tiền.
 Hạn chế về số người chơi trên cùng một máy.
• XBox 360:
o Ưu thế:
 Là thiết bị chơi game chuyên dụng có thể nâng cấp thành thiết bị giải trí đa
truyền thông.
o Khuyết điểm:
 Khó nâng cấp và bảo dưỡng.
25

×