Bài 2. Lưu trữ dữ liệu trong Construct 2
Như ở
mấy chương trước thì tôi sẽ chỉ cho bạn cách phá hủy kẻ địch và
thêm điểm vào trò chơi. Tuy nhiên, trọng tâm của chương này là lưu trữ
dữ liệu trò chơi nên tôi sẽ trình bày phần này trước. Có 4 đối
tượng ta có thể sử dụng để lưu trữ dữ liệu trong C2: array (mảng),
dictionary (từ điển), WebStorage và XML. Chúng ta sẽ ko đề cập đến XML
trong cuốn sách này vì nó khá khó khăn cho người mới lập trình,
nhưng chỉ cần 3 cái đầu tiên là đủ rồi.
1. Làm quen với mảng
Một mảng,
trong ngôn ngữ lập trình, là một danh sách các thứ đã được ra lệnh.
Một mảng có thể là tất cả giá trị văn bản, tất cả giá trị chữ
số, hoặc là một kết hợp giữa văn bản và số. Trong ngôn ngữ lập
trình, các mảng được viết như là một danh sách dữ liệu trong dấu
ngoặc vuông. Ví dụ, một mảng về các đất nước sẽ là [“ Canada”, “ USA
“, “ Viet Nam “, “ Japan “, “ China”, “Laos”], trong khi bảng của giá trị
chữ số là [100, 250, 23, 12, 1998].
Một
điều cần nhớ khi xử lí các mảng là không dựa trên những danh sách
đã liệt kê, nghĩa là chúng bắt đầu với 0 thay vì 1. Chính vì vậy,
trong danh sách các quốc gia, Canada sẽ là số 0, Việt Nam sẽ là số 2.
Hãy nhớ vì đây là một lỗi mà mọi người hay mắc phải.
2. Tìm hiểu về các yếu tố của một mảng
Theo mặc
định, mảng của C2 chưa 10 thành viên rỗng. Thành viên là các yếu tố
giá trị được lưu trữ trong một mảng. Lấy mảng về các quốc gia làm
ví dụ, chúng ta có thể đánh số các thành viên như sau:
Countries [0]
= “ Canada “
Countries [1]
= ” USA “
Countries [2]
= “ Viet Nam “
Countries [3]
= “Japan “
Countries [4]
= “ China “
Countries [5]
= “ Laos “
Countries [6]
= empty
Countries [7]
= empty
Countries [8]
= empty
Countries [9]
= empty
Khi bạn muốn
thêm một thành viên khác vào mảng, bạn phải thêm nó vào giữa phạm vi
tổng của các phần tử (tôi sẽ giải thích điều này trong phần Sử dụng
mảng trong khi làm game). Chính vì vậy, bạn có thể thêm countries [6]
qua countries [9]; hãy thử thêm 1 phần tử cho countries [11], sẽ ko có
gì xảy ra cả. Nó sẽ không thay đổi mảng nào cả. Nếu bạn muốn thêm
nhiều thành viên hơn tổng số phần tử của mảng, bạn phải thay đổi độ
dài của nó trước tiên.
Độ
dài là tổng số phần tử mà mảng có thể chứa. Một mảng có 10 thành
viên tức là độ dài của nó là 10. Để thêm 15 hay 20 thành viên, bạn
phải thay đổi độ dài của nó.
Để
thay đổi độ dài của mảng, ta chỉ cần thay đổi giá trị của nó trong
thanh Properties. Trong ảnh chụp
màn hình sau đây, Width là chiều
dài trục x của mảng, Height là chiều dài trục y, và Depth là chiều dài trục z.
Thông tin về những trục này sẽ được giải thích ở phần tiếp theo.
3. Mảng một chiều và mảng đa chiều
Những
gì tôi sắp giới thiệu ở sẽ sẽ có chút khó khăn cho người mới, nhưng
đây là một tính năng của mảng và đối tượng mảng mà C2 hỗ trợ, nên
tôi phải nói về nó. Có 2 loại mảng:
- Mảng một chiều: đây là các mảng chỉ chứa dữ liệu một chiều trên trục x. Một ví dụ về mảng mộ chiều là dữ liều về các quốc gia va con số mà tôi đã đề cập ở trên.
- Mảng đa chiều: đây là những mảng chứa dữ liệu nhiều hơn mảng một chiều. Một mảng 2 chiều được coi như là một bảng nơi dữ liệu được lưu trữ ở trục x và y của nó. Ví dụ về cái này là một bảng mà chứa các chỉ số của mỗi kẻ thù như sau:
Mảng
đa chiều khác là một mảng 3 chiều nơi dữ liệu được lưu trữ ở trục x,y và z. Điều này có thể được nhìn thấy khi bạn lưu trữ dữ
liệu trong một kho lưu trữ hình khối lập phương. Nói chung, bạn có
thể ko cần mảng đa chiều trong trò chơi của mình. Đối với một trò
chơi đơn giản, mảng một chiều là đủ để lưu trữ dữ liệu.
WAITING FOR LUV
Bạn có muốn cải thiện khả năng thiết kế đồ họa của mình? Chắc hẳn các bạn cũng biết, nếu các dòng code là linh hồn của một trò chơi, thì đồ họa chính là bộ mặt của trò chơi đó. Đồ họa đẹp, dễ nhìn sẽ khiến trò chơi của bạn tăng tỉ lệ hấp dẫn người xem đến 90%. Hiện tại có hai công cụ hỗ trợ thiết kế đồ họa game tiện nhất mà mình biết, đó là Photoshop và Illustrator. Mình sẽ cố gắng tìm kiếm và chia sẻ các đồ họa game miễn phí cho các bạn tại blog này; tuy nhiên,
một trò chơi mà 100% do chính mình tạo ra vẫn hơn là đi cóp nhặt hình ảnh từ nơi khác đúng không nào. Tiện đây, mình có chia sẻ một khóa học thiết kế đồ họa Game 2D cho Mobile. Các bạn có thể tham khảo dưới đây để được giảm 40% học phí nhé.
4. Lưu trữ dữ liệu trong một từ điển (Dictionary)
Một từ điển
khá giống với một mảng, nó có nghĩa là cũng lưu trữ giá trị văn
bản và số. Tuy nhiên, có 2 sự khác biệt trong từ điển: nó không sắp
đặt các thành viên và giá trị lưu trữ của nó kết hợp với các khóa.
Một mảng có thành viên đầu tiên trong mục lục là số 0, trong từ điển
thì ko có thứ tự như thế này.
Một
từ điển lưu trữ các giá trị của nó liên kết với các khóa. Các
khóa là chuỗi văn bản được sử dụng để truy cập giá trị. Chính vì
vậy, ví dụ, chính ta lưu trữ giá trị của Joe với khóa username,
và giá trị 250 với khóa scores. Khôi phục khóa username sẽ cho chúng ta Joe, và khôi phục khóa scores sẽ cho chúng ta 250. Hãy nhớ rằng các phím được
phân biệt chữ hoa và chữ thường, chính vì vậy username và Username là 2 giá trị lưu trữ khác nhau.
5. So sánh giữa mảng (array) và từ điển
Bây
giờ, bạn đã biết mảng và từ điển khá giống nhau, nhưng có một vài
sự khác biệt:
Ghi
nhớ sự khác biệt, những tình huống ta sử dụng mảng và những tình
huống ta sử dụng từ điển. Ta sẽ sử dụng mảng khi:
- Bạn muốn sắp xếp dữ liệu, dù là tăng hay giảm.
- Muốn lấy lại giá trị bằng một số quy tắc toán học; ví dụ, chúng ta có thể chỉ muốn xem thành viên 1 đến 5.
- Lưu trữ dữ liệu phức tạp bằng mảng đa chiều.
Chúng
ta sẽ sử dụng từ điển khi:
- Muốn tạo các danh sách giá trị chúng ta muốn liên kết với một cái tên.
- Muốn khôi phục dữ liệu dựa vào văn bản; ví dụ, chúng ta có thể tạo ra 1 từ điển upgradePoint và lưu trữ giá trị với khóa hero1. Khi chúng ta muốn thêm nâng cấp cho hero1, chúng ta phải gọi từ điển với khóa hero1.
6. Sử dụng những mảng trong trò chơi của bạn
Được rồi,
tôi đã giải thích rất nhiều về mảng và từ điển; bây giờ là lúc đưa
chúng vào sử dụng. Trước hết, ta hãy tạo một biến toàn cầu tên là Scores với loại là Number; chúng ta sẽ sử dụng cái
này để lưu trữ điểm của chúng ta. Sau đó, hãy thêm một đối tượng
mảng tới game project; những đối tượng mảng sẽ được thêm vào toàn bộ
dự án. Đặt tên đối tượng này là scoreArray.
Chúng
ta sẽ tăng giá trị điểm số lên 10 mỗi khi tàu của kẻ đich bị phá
hủy. Chúng ta sẽ phá hủy tàu địch mỗi lần nó trúng laze của người
chơi. Thông thường, ở các game bắn máy bay khác, kẻ địch sẽ có máu
và giảm dần xuống đến khi bị phá hủy; những trong game này, kẻ địch
của chúng ta sẽ bị phá hủy trong một phát bắn. Chính vì vậy, chỉnh
sửa sự kiện nơi playerBullet
trúng kẻ địch, sau đó chúng ta sẽ thêm sự kiện khi kẻ địch bị tiêu
diệt.
Chúng
ta đã thêm một giá trị cho biến toàn cầu, nhưng chúng ta chưa thêm nó
tới mảng của chúng ta. Có 2 cách để thêm một phần tử vào 1 mảng:
- Đẩy nó: Push là một lệnh thông thường trong ngôn ngữ lập trình truyền thống khi bạn muốn chèn một phần tử vào một mảng. Có 2 cách đẩy: đẩy trước và đẩy sau. Đẩy sau là chèn một phần tử tới cuối mục lục của mảng; ví dụ, nếu một mảng của 10 phần tử rỗng là đẩy ngược, thì thành viên mới là mục lục 9. Nếu nó đẩy ngược lại lần nữa, thì phần tử đầu tiên là mục lục 8, phần từ mới là mục lục 9, vân vân. Đẩy trước cũng như đẩy ngược, nhưng phần tử mới đước đẩy tới mục lục đầu tiên của một mảng.
- Thiết lập giá trị tại một vị trí: thiết lập giá trị tại một vị trí rất dễ hiểu, vì nó ko thay đổi vị trí của thành viên khác của mảng trừ khi nó cùng một vị trí. Vì vậy, sử dụng các mảng quốc gia chúng ta thấy từ trước, chúng ta biết mục lục 6 đến 9 là trống rỗng, thêm Cuba vào mục lục số 7 sẽ không làm thay đổi vị trí của các phần tử khác; nó đơn giản là thêm một giá trị mới. Điều quan trọng nhất để nhớ ở đây là nó sẽ xóa vị trí cũ nếu vị trí mục lục chỉ định đã có một giá trị. Vì vậy, ví dụ, nếu chúng ta chèn Mexico vào mục lục 2, nó sẽ xóa USA và thay bằng Mexico.
Chúng tôi cho phép người chơi thu thập càng nhiều điểm số càng tốt trước khi chúng tôi lưu điểm vào mảng của chúng tôi. Chúng tôi sẽ làm điều này khi người chơi bị tiêu diệt, chính vì vậy hãy chỉnh sửa sự kiện nơi viên đạn của kẻ địch trúng người chơi và thêm một sự kiện khác khi người chơi bị tiêu diệt:
Code
cho On destroyed như sau:
Điều
này sẽ thiết lập giá trị của scoresArray
ở mục lục 0 tới biến scores. Khi
thiết lập giá trị, bạn có thể thấy hành động set at XY và set at XYZ.
Chúng ta sẽ sử dụng set at X. 2
cái kia được sử dụng khi bạn chèn giá trị vào mảng đa chiều mà tôi
đã giải thích bên trên.
Bản dịch do construct2vn.ga thực hiện
Ai sao chép hay chia sẻ hãy ghi nguồn và đưa link www.construct2vn.ga vào đầu bài chia sẻ nhé
Ai sao chép hay chia sẻ hãy ghi nguồn và đưa link www.construct2vn.ga vào đầu bài chia sẻ nhé