Phạm Thi Vương SVTH: Phạm Trịnh Đồng Nguyễn Thịnh Khả - Đặc điểm chính: o Các chức năng: Điều chỉnh các thông số không bằng cách nhập trực tiếp mà là qua hình ảnh bảng điều khiển: Chức
Trang 1KHOA CÔNG NGHỆ PHẦN MỀM
KHÓA LUẬN TỐT NGHIỆP
ỨNG DỤNG XNA XÂY DỰNG CHƯƠNG
Trang 2GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Foreword
Mở đầu
Lời cảm ơn
Mục lục
Thuật ngữ và từ viết tắt
Danh mục bảng biểu
Danh mục hình vẽ
CHƯƠNG I: GIỚI THIỆU 1
1 Giới thiệu đề tài 1
2 Mục tiêu đề tài 7
CHƯƠNG II: KIẾN THỨC VẬT LÝ 9
1 Chuyển động điều hòa của con lắc đơn 9
2 Chuyển động của một vật trên mặt phẳng nghiêng 10
3 Chuyển động của một vật bị ném xiên 14
CHƯƠNG III: CÔNG NGHỆ XNA 17
1 Tổng quan về XNA 17
1.1 Giới thiệu về XNA 17
1.2 XNA Framework 17
1.3 XNA Game Studio 18
2 Cấu trúc cơ bản của một Project XNA Game 19
3 XNA với lập trình Game 2D 22
3.1 Giới thiệu về XNA và Game 2D 22
3.2 Tạo Class mới cho Project 22
3.3 Xử lí Input, Audio và Font 24
4 XNA với lập trình Game 3D 30
4.1 Môt số khái niệm về đơn vị căn bản trong lập trình Game 3D 30
4.2 XNA với lập trình Game 3D 35
Trang 3GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
2 Thiết kế 43
2.1 Use Case 43
2.2 Giải thích 43
3 Xử lí 45
3.1 Phóng đại góc quay của con lắc đơn 45
3.2 Vấn đề với việc chọn vị trí ban đầu của con lắc đơn 45
3.3 Vấn đề xem thông số tại một vị trí của con lắc đơn 46
3.4 Tìm công thức chung cho các Pha chuyển động trên mặt phẳng 46
3.5 Lực ma sát nghỉ 48
3.6 Vận tốc khi chuyển đổi mặt phẳng 50
3.7 Vấn đề AdaptRatio trong ném xiên 51
3.8 Chuyển động của ném xiên khi xuống thấp hơn độ cao ban đầu 51
3.9 Ý tưởng Game Tổng Hợp 52
3.10 Hiển thị tiếng Việt 54
3.11 Vấn đề với GameTime 57
4 Cài đặt 59
4.1 Diagram 59
4.2 DGui 73
4.3 Giao diện 78
CHƯƠNG V: KẾT LUẬN 85
1 Ưu điểm 85
2 Nhược điểm 85
3 So sánh Physics Simulator với một số ứng dụng mô phỏng vật lý khác 86 4 Hướng phát triển 87
TÀI LIỆU THAM KHẢO 88
Trang 4GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Trang 5GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Bảng IV.4.3.1.1.1 Button OK trên màn hình thông tin 78
Bảng IV.4.3.2.2.1 Các Control trên màn hình Input của 'Con lắc đơn' 79
Bảng IV.4.3.3.2.1 Các Control trên màn hình Input của 'Vật ném xiên' 81
Bảng IV.4.3.4.2.1 Các Control trên màn hình Input của 'Mặt phẳng nghiêng' 83
Bảng V.1 Physics Simulator so với ứng dụng mô phỏng vật lý 1 86
Bảng V.2 Physics Simulator so với ứng dụng mô phỏng vật lý 2 86
Bảng V.3 Physics Simulator so với ứng dụng mô phỏng vật lý 3 86
Bảng V.4 Physics Simulator so với ứng dụng mô phỏng vật lý 4 86
Bảng V.5 Physics Simulator so với ứng dụng mô phỏng vật lý 5 87
Trang 6Hình III.4.1.5.2 Terrain tạo từ Height Map hình Wireframe (trên),
SolidRendering (dưới)
33
Hình III.4.1.6.2 Skeletal Animation với Mesh và Skeleton 34
Hình III.4.2.5.1 Skeletal Animation – Alien Spider 41
Trang 7GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Trang 8GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
CHƯƠNG I: GIỚI THIỆU
1 Giới thiệu đề tài
Vật lý nghiên cứu tự nhiên với nhiều lĩnh vực: cơ, nhiệt, quang, điện, hạt nhân…
Các lĩnh vực trên đem lại tri thức để con người hiểu rõ hơn về thế giới xung quanh mình Trong đó, cơ học, đặc biệt là động lực học, là một lĩnh vực của các hiện tượng gần gũi nhất: Con lắc đơn (vật treo đung đưa trên cành cây), Vật ném xiên(quả bóng chuyền lên cao rơi xuống), Mặt phẳng nghiêng(quyển sách đặt trên mặt bàn nghiêng) Trong cơ học, ba loại hiện tượng trên cũng dễ quan sát thấy trực tiếp hơn so với một số hiện tượng khác như: Con lắc lò xo, Ròng rọc…
Rất nhiều hiện tượng chỉ được hiểu chi tiết qua mô tả nhờ các thông số, từ ngữ (sách, vở) Trong khi, hiện tại, công nghệ thông tin với sự phát triển cao của công nghệ vi tính có thể cung cấp sự hỗ trợ hiện đại rất lớn Điều đó dẫn tới khả năng mô phỏng các hiện tượng vật lý một cách trực quan, như nhiều ứng dụng đã có trên thị trường XNA vốn là một công cụ cho lập trình Game trên C# của Microsoft với nhiều ưu điểm và cũng
hỗ trợ rất tốt cho mục đích mô phỏng này
Một số ứng dụng Mô phỏng vật lý
Ứng dụng 1 [13]
Hình I.1.1
Trang 9GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Copyright © Walter Fendt, May 21, 1998
- Là một mô phỏng của hiện tƣợng con lắc đơn
- Đặc điểm chính:
o Các chức năng:
Chức năng Reset, Start
Chức năng chỉnh chế độ quan sát với tốc độ chậm (Slow Motion)
Chức năng chỉnh các thông số bên cạnh màn hình mô phỏng
o Các thông tin hiển thị:
Hiển thị một số thông số của hiện tƣợng
Hiển thị Đồ thị, Quỹ đạo chuyển động
Hiển thị đồng hồ đếm thời gian
- Ƣu điểm chính:
o Giao diện thể hiện tính chất khoa học
o Thể hiện thông tin của hầu hết thông số cần thiết
- Khuyết điểm chính:
o Không có thông tin về năng lƣợng
Ứng dụng 2 [6]
Hình I.1.2
- Thiết kế: CN.Trần Văn Huy – Đại Học Sƣ Phạm Hà Nội
- Là một mô phỏng của hiện tƣợng vật ném xiên với hình ảnh khẩu đại bác bắn
từ các độ cao khác nhau
Trang 10GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Đặc điểm chính:
o Các chức năng: Điều chỉnh các thông số không bằng cách nhập trực tiếp mà
là qua hình ảnh bảng điều khiển:
Chức năng điều chỉnh góc bay
Chức năng điều chỉnh vận tốc
Chức năng điều chỉnh độ cao
o Các thông tin hiển thị:
Hiển thị Quỹ đạo
- Copyright © Walter Fendt, September 13, 2000
- Là một mô phỏng của hiện tƣợng vật ném xiên
- Đặc điểm chính:
Trang 11GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
o Các chức năng:
Chức năng Reset, Start
Chức năng chỉnh chế độ quan sát với tốc độ chậm (Slow Motion)
Chức năng chỉnh các thông số bên cạnh màn hình mô phỏng
Chức năng chọn các đại lượng
o Các thông tin hiển thị:
Hiển thị một số thông số của hiện tượng
Hiển thị trục tọa độ, Quỹ đạo chuyển động
Hiển thị đồng hồ đếm thời gian
- Ưu điểm chính:
o Giao diện thể hiện tính chất khoa học
o Thể hiện thông tin của hầu hết thông số cần thiết
- Khuyết điểm chính:
o Không có thông tin về năng lượng
Ứng dụng 4 [12]
Hình I.1.4
- Copyright: Fu-Kwun Hwang
- Là một mô phỏng cho hiện tượng ném xiên, gồm hai khẩu súng luôn hướng
vào nhau
Trang 12GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Đặc điểm chính:
o Các chức năng:
Chức năng Reset, Start, Show
Chức năng chỉnh chế độ quan sát với tốc độ chậm (Slow Motion)
Chức năng thay đổi vị trí (độ cao với khẩu súng bên trái, độ xa với khẩu súng bên phải)
Chức năng thay đổi vận tốc
o Các thông tin hiển thị:
Hiển thị Quỹ đạo chuyển động
Trang 13GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Copyright © 2004-2010 University of Colorado
- Nhóm phát triển PhET:
o Phát triển phần mềm: Sam Reid
o Nhóm thiết kế: Wendy Adams, Trish Loeblein, Kathy Perkins, Carl Wieman
o Phỏng vấn: Danielle Harlow
- Là một chương trình mô phỏng chuyên biệt cho mặt phẳng nghiêng với dạng
người đẩy vật thể, tập hợp một số mô phỏng con, mỗi mô phỏng có hai mặt phẳng: một mặt phẳng ngang dài 10 mét, một mặt phẳng nghiêng dài 10 mét
Các mô phỏng này được chia theo loại:
o Ứng dụng giới thiệu chung với các thông số cơ bản của hiện tượng
o Ứng dụng tập trung vào theo dõi ma sát
o Ứng dụng tập trung vào theo dõi đồ thị lực
o Ứng dụng Game mini (dựa theo mô phỏng)
Chức năng điều chỉnh lực khi mô phỏng đang diễn ra
Chức năng thay đổi góc nghiêng khi mô phỏng đang diễn ra (kéo thả)
Chức năng quay phim quá trình hiện tượng diễn ra trong mô phỏng:
Hiển thị thông tin tương ứng với từng mô phỏng con:
Ứng dụng giới thiệu chung: có các loại đối tượng riêng:Thùng nhỏ,
Tủ hồ sơ, Chó ngủ, Tủ lạnh,Vật bí mật
Ứng dụng ma sát: Hệ số ma sát, Gia tốc trọng trường
Ứng dụng đồ thị lực: Các loại lực, Đồ thị lực
Trang 14GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Ưu điểm: Là một ứng dụng hoàn chỉnh cho mô phỏng cho duy nhất một hiện tượng, là thành quả của cả một tập thể lớn, do đó có sự trau chuốt kỹ lưỡng:
o Giao diện, chức năng và thao tác thân thiện
o Thể hiện thông tin của hầu hết thông số cần thiết
o Thiết kế các chức năng thêm thú vị
- Khuyết điểm:
o Hình ảnh hiển thị, đặc biệt là các Vector có thể vượt ra ngoài màn hình mô phỏng
o Không có thông tin về năng lượng
Một số ưu điểm của XNA
- Miễn phí khi người cộng tác ít
- Thư viện XNA được viết lại và nâng cao cho thư viện DirectX, mục đích để dễ
sử dụng và mang lại hiệu quả cao
- Hệ thống thư viện quản lý và phát triển mã sẵn có, các API cơ bản cần thiết cho một chương trình
o Vật ném xiên: dạng hiện tượng trong tự nhiên với một vật bị ném lên cao
và sau một thời gian thì hạ độ cao và rơi xuống đất
Trang 15GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
o Chuyển động của vật trên đoạn đường tổng hợp gồm mặt phẳng ngang và mặt phẳng nghiêng: dạng hiện tượng như trường hợp đặt một tấm gỗ dựng nghiêng để di chuyển các vật thể từ thấp lên cao
- Các mô phỏng trên cần được thực hiện theo mô hình mô phỏng động học: “Mô
hình động học diễn tả hệ thống diễn ra theo thời gian, giống như hệ thống băng chuyền trong nhà máy[4]”
- Chương trình mang những đặc điểm chính như sau:
o Giao diện, chức năng, thao tác thân thiện
o Ý tưởng thể hiện mới mẻ
o Các hình ảnh hiển thị không vượt ra ngoài màn hình
o Thể hiện được thông tin của các thông số trong mỗi hiện tượng
o Cần có thông số năng lượng
o Thiết kế các chức năng thêm thú vị
Trang 16GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
CHƯƠNG II: KIẾN THỨC VẬT LÝ
1 Chuyển động điều hòa của con lắc đơn
Cấu tạo
- Gồm một sợi dây không giãn có độ dài l, khối lƣợng không đáng kể, một đầu
cố định, đầu còn lại đƣợc gắng vào một vật có khối lƣợng m Con lắc dao động với biên độ góc nhỏ (α < 100)
- Điều kiện dao động điều hoà:Bỏ qua ma sát, lực cản và α0 << 100 hay S0 << l
Trang 17GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
s w
= - = - w a2
o S0 =
2
2 v s
o Động năng: Wđ = mv2 = mgl(cos- cos0)
o Cơ năng: W = Wt + Wđ = mgl(1 - cos0)
o Vận tốc khi đi qua li độ góc : v =
o Vận tốc khi đi qua vị trí cân bằng ( = 0): |v| = vmax =
o Nếu 0 100 thì: v = ; vmax = 0 ; , 0 tính ra rad
- Sức căng của sợi dây:
o Sức căng của sợi dây khi đi qua li độ góc là:T = mgcos + = mg(3cos - 2cos0)
o Tại VTCB là: TVTCB = Tmax = mg(3 - 2cos0)
o Tại vị trí biên: Tbiên = Tmin = mgcos0
Với 0 100: T = 1 + - 2; Tmax = mg(1 + ); Tmin = mg(1 -
2 0
2
)
2 Chuyển động của một vật trên mặt phẳng nghiêng
Cấu tạo: Là mặt phẳng với các điểm đầu cuối có độ cao khác nhau
Công dụng: Dùng mặt phẳng nghiêng có thể kéo vật lên với lực kéo nhỏ hơn trọng lƣợng của vật
2 1
2gl 0
)cos1(
2gl 0
) ( 2 2
0
Trang 18o Gốc toạ độ O: tại vị trí vật bắt đầu chuyển động
o Chiều dương Ox: Theo chiều chuyển động của vật
o Mốc thời gian: Lúc vật bắt đầu chuyển động ( t0 = 0)
- Áp dụng định luật II Niu-tơn cho vật:
Chiếu phương trình trên lên chiều chuyển động của vật ta có:
Trang 19GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Lực ma sát làm chuyển hóa động năng của chuyển động tương đối giữa các bề mặt thành năng lượng ở dạng khác Việc chuyển hóa năng lượng thường là do va chạm giữa phân tử của hai bề mặt gây ra chuyển động nhiệt hoặc thế năng dự trữ trong biến dạng của bề mặt hay chuyển động của các electron, được tích lũy một phần thành điện năng hay quang năng Trong đa số trường hợp trong thực tế, động năng của các bề mặt được chuyển hóa chủ yếu thành nhiệt năng
Về bản chất vật lý, lực ma sát xuất hiện giữa các vật thể trong cuộc sống là lực điện từ, một trong các lực cơ bản của tự nhiên, giữa các phân tử, nguyên tử
Có thể xấp xỉ lực ma sát tỷ lệ với lực ép hai bề mặt lên nhau, áp lực F0 vuông góc với hai bề mặt, và hệ số ma sát, k, giữa các vật liệu:
F = F0k
Ma sát nghỉ
Ma sát nghỉ (hay còn được gọi là ma sát tĩnh) là lực xuất hiện giữa hai vật tiếp xúc
mà vật này có xu hướng chuyển động so với vật còn lại nhưng vị trí tương đối của chúng chưa thay đổi Ví dụ như, lực ma sát nghỉ ngăn cản một vật trượt trên bề mặt nghiêng Hệ
số của ma sát nghỉ, thường được kí hiệu là μt, thường lớn hơn so với hệ số của ma sát động Lực ban đầu làm cho vật chuyển động thường bị cản trở bởi ma sát nghỉ
Một ví dụ quan trọng khác về lực ma sát nghỉ là: lực ma sát nghỉ ngăn cản khiến cho bánh xe khi mới khởi động lăn không được nhanh như khi nó đang chạy Mặc dù vậy khi bánh xe đang chuyển động, bánh xe vẫn chịu tác dụng của lực ma sát động Cho nên lực ma sát nghỉ lớn hơn lực ma sát động
Giá trị lớn nhất của lực ma sát nghỉ, khi vật bắt đầu chuyển động, hay ma sát nghỉ cực đại, được tính bằng công thức:
F = F0kt với:
kt là hệ số ma sát tĩnh
F0 là lực mà vật tác dụng lên mặt phẳng
Ma sát động
Trang 20GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Ma sát động xuất hiện khi một vật chuyển động so với vật còn lại và có sự cọ xát giữa chúng Hệ số của ma sát động thường nhỏ hơn hệ số ma sát nghỉ Mỗi loại ma sát động lại có một kí hiệu khác nhau:
- Trường hợp này tạo ra lực ma sát có phương trùng với tiếp tuyến của bề mặt tiếp xúc giống như lực ma sát trượt, mà nó còn xuất hiện khi có lực vuông góc với bề mặt tiếp xúc Lực này góp một phần đáng kể (là một phần quan trọng khi vận tốc của vật thể đủ lớn) tạo nên ma sát nhớt Chú ý rằng trong một số trường hợp, lực này sẽ nâng vật thể lên cao
- Ma sát lăn là lực ngăn cản lại sự lăn của một bánh xe hay các vật có dạng hình tròn trên mặt phẳng bởi sự biến dạng của vật thể và/ hoặc của bề mặt Lực ma sát lăn nhỏ hơn các lực ma sát động khác Hệ số ma sát lăn thường có giá trị là 0,001
Ví dụ điển hình nhất của lực ma sát lăn là sự di chuyển của bánh các loại xe cộ trên đường
Hệ số ma sát
Hệ số ma sát không phải là một đại lượng có đơn vị, nó biểu thị tỉ số của lực ma sát nằm giữa hai vật trên lực tác dụng đồng thời lên chúng Hệ số ma sát phụ thuộc vào chất liệu làm nên vật; ví dụ như, nước đá trên thép có hệ số ma sát thấp (hai vật liệu có thể trượt dễ dàng trên bề mặt của nhau), cao su trên mặt đường có hệ số ma sát lớn(hai loại vật liệu không thể dễ dàng trượt trên bề mặt của nhau) Các hệ số ma sát có thể nằm trong khoảng từ 0 cho tới một giá trị lớn hơn 1- trong điều kiện tốt, lốp xe trượt trên bê tông có thể tạo ra hệ số ma sát với giá trị là 1,7
Lực ma sát luôn luôn có xu hướng chống lại chuyển động (đối với lực ma sát động) hoặc xu hướng chuyển động (đối với ma sát nghỉ) giữa hai bề mặt tiếp xúc nhau
Ví dụ như, một hòn đá trượt trên băng đã chịu tác dụng của lực ma sát động làm chậm nó lại Một ví dụ về lực ma sát chống lại xu hướng chuyển động của vật, bánh xe của một chiếc xe đang tăng tốc chịu tác dụng của lực ma sát hướng vế phía trước; nếu không có
nó bánh xe sẽ bị trượt ra phía sau Chú ý rằng trong trường hợp này lực ma sát không
Trang 21hệ số ma sát nằm trong khoảng từ 0.3 đến 0.6 Các giá trị ngoài tầm này thường rất hiếm gặp, nhưng Teflon có thể có hệ số ma sát thấp với giá trị là 0.04 Hệ số ma sát có giá trị không chỉ xuất hiện trong trường hợp bay lên nhờ có từ trường Cao su trên các mặt tiếp xúc khác thường có hệ số ma sát nằm trong khoảng 1,0 đến 2
Chuyển động thẳng biến đổi đều
Chuyển động thẳng biến đổi đều là chuyển động của một vật có quỹ đạo là đường thẳng, và có vận tốc tức thời hoặc là tăng đều hoặc là giảm đều theo thời gian Chuyển động thẳng biến đổi đều của vật mà vận tốc tức thời tăng đều theo thời gian được gọi là chuyển động thẳng nhanh dần đều; ngược lại là chuyển động thẳng chậm dần đều Chuyển động thẳng biến đổi đều của vật được đặc trưng bởi bốn đại lượng sau: gia tốc, vận tốc tức thời, quãng đường đi được và thời gian chuyển động
Trong chuyển động thẳng biến đổi đều với vận tốc biến đổi theo thời gian biến đổi, Gia Tốc được dùng để mô tả vận tốc của chuyển động tăng tốc, giảm tốc hay chuyển động với vận tốc không đổi
vt = v0 + at
Gia tốc được định nghĩa là tỉ lệ giữa biến đổi vận tốc với biến đổi thời gian
Chuyển động thẳng đều không có thay đổi về vận tốc có gia tốc bằng 0.Chuyển động thẳng biến đổi đều tăng tốc có gia tốc là một số dương; chuyển động thẳngbiến đổi đều giảm tốc có gia tốc là một số âm
3 Chuyển động của một vật bị ném xiên
Trang 22GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Khảo sát chuyển động của một vật bị ném xiên từ một điểm O trên mặt đất Sau khi được truyền một vận tốc đầuVo làm với mặt phẳng ngang một góc α vật chỉ còn chịu tác dụng của trọng lực (bỏ qua sức cản của không khí)
Hình II.3.1 Xét một vật được ném ra theo phương xiên(có vận tốc ban đầu v0hợp với phương
ngang một góc α ) Với dạng quỹ đạo là một parabol, chuyển động ném xiên có thể phân
tích thành hai chuyển động là chuyển động theo phương ngang Ox và theo phương thẳng
đứng Oy
Hình II.3.2 Chọn hệ trục tọa độ như hình vẽ.Gốc tọa độ O là vị trí ném vật Gốc thời gian là
lúc ném vật(t0 = 0)
Ta xét chuyển động của vật trên trục Ox và Oy
- Theo OY: ta có các phương trình mô tả chuyển động của vật là:
o Gia tốc:
Trang 23- Phương trình quỹ đạo của chuyển động ném xiên:
- Độ cao cực đại của vật bị ném:
- Tầm bay xa của vật bị ném:
- Vận tốc của vật bị ném xiên:
Trang 24GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
CHƯƠNG III: CÔNG NGHỆ XNA
1 Tổng quan về XNA
1.1 Giới thiệu về XNA
Microsoft XNA là một bộ công cụ được cung cấp bởi Microsoft giúp phát triển
và quản lí game trên các hệ máy tính XNA cố gắng hỗ trợ các nhà phát triển game trong việc viết "các đoạn code lặp đi lặp lại" và gắn kết các khía cạnh khác nhau của việc sản xuất game thành một hệ thống đơn lẻ
- Bộ công cụ XNA được công bố ngày 24 Tháng Ba năm 2004, tại Hội nghị các nhà phát triển game tại San Jose, California
- Bản Preview của XNA đã được phát hành vào ngày 14 Tháng 3, 2006
- XNA Game Studio 2.0 được phát hành vào tháng Mười Hai năm 2007, tiếp theo là XNA Game Studio 3.0 vào ngày 30 tháng Mười 2008
- XNA Game Studio 4.0 được phát hành vào ngày 16 Tháng Chín năm 2010 cùng với công cụ phát triển Windows Phone 7
XNA hiện tại là toàn bộ môi trường phát triển Game của Microsoft, bao gồm bộ Kit phát triển game cho Xbox và XNA Game Studio
"XNA" ban đầu là tên của dự án phát triển, Xbox New Architecture Microsoft
dự định phát hành máy chơi game Xbox, tuy nhiên năm 2005 Xbox 360 được ra đời thay cho tên Xbox và XNA được dùng cho công cụ phát triển game trong toàn bộ hệ thống Microsoft
1.2 XNA Framework
XNA Framework là sự kết hợp giữa hai phiên bản NET Compact Framework 2.0
phát triển cho Xbox 360 và NET Framework 2.0 trên Windows XNA bao gồm một tập hợp rộng lớn các thư viện, dành riêng cho việc phát triển game, thúc đẩy sử dụng lại tối
đa các đoạn code trên mọi nền tảng Framework này dựa trên một phiên bản của Common Language Runtime được tối ưu hóa để cung cấp một môi trường thực thi hoàn chỉnh Bản Runtime này có sẵn trong Windows XP, Windows Vista, Windows 7,Windows Phone 7 và Xbox 360 Khi một game XNA được viết bởi Runtime này, nó có thể chạy trên bất kỳ nền tảng nào hỗ trợ XNA Framework mà chỉ chỉnh sửa tối thiểu hoặc không Game viết theo framework này phải được viết bằng ngôn ngữ NET, nhưng chỉ có
C # trong XNA Game Studio Express IDE và tất cả các phiên bản của VisualStudio 2008
và 2010 (lúc XNA 4.0) được hỗ trợ chính thức
Do đó XNA Framework chỉ giới hạn ở mức chi tiết kĩ thuật thấp (low-level) liên quan đến việc viết mã game, mà tập trung đảm bảo sự hoạt động thông suốt khi game
Trang 25GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
được chuyển từ một nền tảng tương thích sang nền tảng khác, do đó cho phép các nhà phát triển game tập trung vào nội dung và giải thuật trong game XNA Framework tích hợp với một số công cụ, như Cross-Platform Audio Creation Tool (XACT), để hỗ trợ trong việc tạo nội dung XNA Framework hỗ trợ viết game cho cả 2D và 3D và cho phép
sử dụng bộ điều khiển và chuyển động của Xbox 360
1.3 XNA Game Studio
XNA Game Studio là một môi trường phát triển tích hợp (IDE) cho việc phát
triển game Bao gồm:
- XNA Game Studio Express phiên bản đầu tiên của XNA Game Studio, được
dành cho sinh viên, các phát triển game tự do Express cung cấp cơ bản "bộ Kit ban đầu" cho việc phát triển game, chẳng hạn như các trò chơi nền tảng, chiến lược thời gian thực, và bắn súng góc nhìn thứ nhất Phiên bản đàu tiên đã không có cách nào vận chuyển mã nhị phân tiền biên dịch giữa các người chơi Xbox 360, nhưng điều này được khắc phục trong "XNA Game Studio Express 1.0 Refresh", làm cho nó có thể biên dịch mã nhị phân Xbox 360 và chia sẻ với Microsoft XNA Creator khác Các phiên bản beta đầu tiên của XNA Game Studio Express được phát hành và cho tải về ngày 30/08/2006, theo sau là một phiên bản thứ hai vào ngày 01/11/2006 Microsoft phát hành phiên bản cuối cùng vào ngày 11/12/2006.Ngày 24/04/2007, Microsoft phát hành một bản cập
nhật được gọi là XNA Game Studio Express 1.0 Refresh
- XNA Game Studio 2.0 được phát hành vào ngày 13/12/2007 XNA Game
Studio 2.0 tương thích với tất cả các phiên bản của Visual Studio 2005 (bao gồm cả các Visual C# 2005 Express Edition), một network API sử dụng Xbox Live trên cả Windows và Xbox 360 và xử lý thiết bị tốt hơn
- XNA Game Studio 3.0 (dành cho Visual Studio 2008 hoặc phiên bản Visual C
# 2008 Express Edition) cho phép các nhà sản xuất game nhắm đến nền tảng Zune và thêm vào hỗ trợ cộng đồng Xbox Live Bản beta được phát hành vào tháng 09/2008 Các phiên bản cuối cùng được phát hành vào ngày 30/10/2008 XNA Game Studio 3.0 hiện tại hỗ trợ C# 3.0, LINQ và hầu hết các phiên bản của Visual Studio 2008 Có thêm một số tính năng mới của XNA Game Studio 3.0, chẳng hạn như chế độ dùng thử thêm vào XNA Game Studio 3.0 sẽ cho phép nhà lập trình dễ dàng thêm các tính năng dùng thử cần thiết cho game, Xbox LIVE mutil-player thêm tính năng mời người chơi, tạo game đa nền tảng chạy trên Windows, Xbox 360 và Zune
- XNA Game Studio 3.1 được phát hành vào ngày 11/06/2009 API bao gồm hỗ
trợ phát lại video, một API chỉnh sửa âm thanh, hệ thống Xbox LIVE Party và
Trang 26GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
hỗ trợ cho các trò chơi sử dụng Xbox 360 Avatar
- XNA Game Studio 4 đƣợc công bố và ban đầu phát hành bản Preview tại
GDC ngày 09/03/2010, và hoàn chỉnh vào ngày 16/09/2010 Bao gồm thêm hỗ trợ cho nền tảng Windows Phone 7 (nhƣ tăng tốc phần cứng 3D), cấu hình phần cứng, cấu hình hiệu ứng, tích hợp các trạng thái đối tƣợng, đa nền tảng và
đa cảm ứng, bộ đệm cho microphone và audio playback, và tích hợp trong Visual Studio 2010
2 Cấu trúc cơ bản của một Project XNA Game
Trong file Game1.cs:
- File Game1.cs là nơi tất cả các đối tƣợng đƣợc khai báo và thực hiện việc xử lí
- Các lệnh using cần cho XNA:
Trang 27GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Hàm tạo thông tin giá trị đầu tiên cho các thành phần trong game:
protected override void Initialize()
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch (GraphicsDevice);
// Allows the game to exit
if ( GamePad GetState( PlayerIndex One).Buttons.Back == ButtonState Pressed)
this Exit();
// TODO: Add your update logic here
base Update(gameTime);
}
Trang 29GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
3 XNA với lập trình Game 2D
3.1 Giới thiệu về XNA và Game 2D
Nói đến làm game ai cũng nghĩ ngay đến ngôn ngữ chuẩn là C++ và bộ thư viện DirectX hay OpenGL Như đã biết C++ thì code rất khó hiểu so với C# và ít được hỗ trợ trong quá trình code Vì thế, làm sao vừa code dễ mà chất lượng game không giảm mấy
so với ngôn ngữ chuẩn C++ nên đa số người dùng lựa chọn công nghệXNA( dựa trên ngôn ngữ C#) của Microsoft để viết game
Ưu điểm:
- Miễn phí khi người cộng tác ít
- XNA cho phép lập trình game chạy trên PC + Windows, XBOX360, ZUNE
- Ngoài ra thư viện XNA được viết lại và nâng cao cho thư viện DirectX, mục đích để dễ sử dụng và mang lại hiệu quả cao
- Hệ thống thư viện quản lý và phát triển mã sẵn có, các API cơ bản cần thiết cho một game
- Hỗ trợ xây dựng hình ảnh 2D - 3D
- Ngoài ra XNA còn kiểm luôn việc quản lý C# và tích hợp chương trình biên dịch NET C#
Nhược điểm:
- Phải trả phí khi có nhiều người cộng tác làm việc ( phiên bản có phí )
3.2 Tạo Class mới cho Project
3.2.1 Tạo class cho một đối tượng trong Game
- Câu lệnh using cần có khi tạo mới 1 class của XNA:
using Microsoft.Xna.Framework.Graphics; // for Texture2D
using Microsoft.Xna.Framework; // for Vector2
- Khai báo biến:
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
Sử dụng Vector2 cho biến size và position ( X, Y ), Texture2D cho biến texture
- Hàm khởi tạo:
Trang 30GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
public clsSprite( Texture2D newTexture, Vector2 newPosition, Vector2 newSize, int
ScreenWidth, int ScreenHeight)
3.2.2 Đưa đối tượng vào Game
- Bổ sung biến trong phần khai báo biến:
- Bổ sung trong hàm LoadContent():
// Load a 2D texture sprite
mySprite1 = new clsSprite (Content.Load< Texture2D >( "ball" ), new Vector2 (0f, 0f),
new Vector2 (64f, 64f));
- Bổ sung trong hàm UnloadContent():
Trang 31GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
// Free the previously alocated resources
mySprite1.texture.Dispose();
- Hàm Update() giữ nguyên
- Bổ sung trong hàm Draw() (Thực hiện đưa Sprite lên bằng một texture tại vị trí nhất định ):
// Draw the sprite using Alpha Blend, which uses transparency information if avaliable
spriteBatch.Begin( SpriteSortMode FrontToBack, BlendState AlphaBlend);
mySprite1.Draw(spriteBatch);
spriteBatch.End();
- Lưu ý là file ảnh phải được chứa trong content
3.3 Xử lí Input, Audio và Font
3.3.1 Input
- Hàm checkKeyboard(): để lấy sự kiện bàn phím gán giá trị cho tốc độ của vật
protectedvoid checkKeyboard()
{
KeyboardState keyboardState = Keyboard GetState();
if (keyboardState.IsKeyDown( Keys Up))
mySprite2.position += new Vector2 (0, -5);
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);
}
- Hàm checkMouse(): để lấy sự kiện click chuột ở vị trí nào gán giá trị cho tốc
độ của vật
Trang 32GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
protectedvoid checkMouse()
{
MouseState MouseState = Mouse GetState();
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);
}
- Kiểm tra input được thực hiện trong hàm Update():
protectedoverridevoid Update( GameTime gameTime)
- Nhạc nền chạy khi bắt đầu, kết thúc hoặc khi đang chơi
- Nhạc hiệu ứng sẽ được chơi tùy trường hợp: va chạm, ăn điểm, chiến thắng
Có 2 cách để đưa âm thanh vào game
Cách 1:
Tạo file MySounds.xap:
Chúng ta chuẩn bị cho âm thanh từ một hệ thống quản lý âm thanh của XNA đó là platform Audio Creation Tools.Các bước như sau:
Trang 33GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
- Bắt đầu XACT bằng cách chọn Start \ Programs \ Microsoft XNA Game Studio 4.0 \ Tools \ Cross-Platform Audio Creation Tool 3 (XACT3)
- Trong bảng XACT window, chọn File \ New Project để tạo mới audio project,
và lưu lại với tên MySounds
- Nhìn phía bên trái cửa sổ, MySounds sẽ xuất hiện với nhiều thành phần khác Click chuột phải vào Wave Banks và lựa chọn New Wave Bank trong cửa sổ hiện ra như hình:
Hình III.3.3.2.1
- Sau đó click chuột phải vào Sound Banks chọn New Sound Bank như hình:
Hình III.3.3.2.2
Trang 34- Ta drag và drop nhạc từ cửa sổ Wave Bank vào Cue box, và lưu lại Vậy là ta
đã có file MySounds.xap, ta add file này bỏ vào project ( thư mục content )
Thêm âm thanh vào Game:
- Phần khai báo thêm các yếu tố của audio:
// Audio objects
AudioEngine audioEngine;
WaveBank waveBank;
SoundBank soundBank;
Cue myLoopingSound = null ;
- Hàm Initiallize() để thiết lập âm thanh lặp ( dùng làm nhạc nền ): đặt nhạc nền trong hàm Initiallize() vì chỉ khi ta thoát game nó mới kết thúc
Trang 35GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
protectedoverridevoid Initialize()
{
audioEngine = new AudioEngine ( @"Content\MySounds.xgs" );
waveBank = new WaveBank (audioEngine, @"Content\Wave Bank.xwb" );
soundBank = new SoundBank (audioEngine, @"Content\Sound Bank.xsb" ); myLoopingSound = soundBank.GetCue( "notify" );
GamePad SetVibration( PlayerIndex One, 0f, 0f);
// Play or stop an infinite looping sound when pressing the "P" button
private SoundEffect collisonSound;
private Song bgSound;
- Hàm Initialize():
bgSound = Content.Load< Song >( "backMusic" );
collisonSound = Content.Load< SoundEffect >( "chord" );
MediaPlayer Play(bgSound);
Trang 36- Thay đổi kiểu Font bằng cách thay đổi tên Font trong thẻ:
<FontName>Calibri</FontName>, ta cũng có thể thay đổi kiểu nghiêng hay in
đậm… với các tên thẻ giống trong Microsoft Word
Các mã lệnh trong file Game1.cs:
- Trong khai báo:
private SpriteFont gameFont;
Trang 37GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
4 XNA với lập trình Game 3D
4.1 Môt số khái niệm về đơn vị căn bản trong lập trình Game 3D
4.1.1 Hệ trục tọa độ 3D
- Hệ trục 3D: Hệ trục tọa độ Oxyz
Hình III.4.1.1.1
4.1.2 Vertice và Primitive
- Vertex (số nhiều – Vertices): Phần cơ bản nhất của vật thể 3D là Vertex (đỉnh)
- Edge: đoạn thẳng đơn (Line) nối hai Vertex
- Primitive: Đơn vị hình học nhỏ nhất mà hệ thống có thể lưu trữ Đôi lúc, cơ sở nhỏ nhất để dựng nên các vật thể, các mô hình cũng gọi là Primitive (Geometric Primitive, Drawing Primitive)
Primitive nguyên thủy nhất là điểm và đường thẳng (Point và Line)
4.1.3 Model và Mesh
- Sự định nghĩa các đối tượng 3D gọi là 3D Model hay đơn giản hơn, Model
- Model là hệ thống phân tầng các Mesh Mesh là một tập hợp nội kết nối của các Vertex, với một số thông tin để biểu diễn
Trang 39GVHD: ThS Phạm Thi Vương SVTH: Phạm Trịnh Đồng
Nguyễn Thịnh Khả
Hình III.4.1.4.1
- Local Space: không gian kiến tạo vật thể 3D với riêng nó
- World Space: không gian lớn, là môi trường 3D
- View Space: không gian theo góc nhìn
- Backface Culling: chọn những phần nhìn thấy được trong View Space theo hình chóp cụt của Camera (frustum)
- Lighting: chiếu sáng
- Clipping: chọn hiển thị những vùng nằm trong View Space
- Projection: phép chiếu
- Viewport Space: chọn một vùng nào đó để chiếu hình
- Rasterization: chuyển hóa thông tin số hóa theo định dạng đồ họa Vector (khối hình) sang định dạng ảnh quét (pixel hay dot) để chiếu lên màn hình, máy in, hoặc lưu trữ
4.1.5 Kiến tạo Terrain - Height Maps
- Là bản đồ 2D dùng để chứa thông tin bản đồ 3D
Hình III.4.1.5.1