Chương 8. Sửa lỗi trong trò chơi
Cho đến bây
giờ, chúng ta đã học được cách làm game. Bạn đã biết cách sử dụng
giao diện C2 như thế nào và cách làm việc với chúng. Và bạn cũng
đã biết cách sử dụng hệ thống sự kiện để viết mã và biểu thức.
Hơn nữa, bạn đã biết cách sử dụng các hành vi trong các đối tượng.
Tuy nhiên, có
thể chúng ta sẽ ko viết đúng mã vào lần đầu tiên. Trên thực tế,
trong các chương làm game trước, tôi đã phải chỉnh sửa rất nhiều
trước khi trình bày với các bạn. Nhưng bây giờ, chúng ta sẽ viết mã
với một chút khác biệt. Tôi sẽ cho bạn thấy các tình huống gây ra
lỗi và cách xử lí chúng.
Trong chương
này, bạn sẽ:
- Học cách sử dụng chức năng debugging của C2.
- Tìm hiểu những tình huống nào thường gây ra lỗi.
- Hiểu thêm về cách C2 chọn đối tượng.
Bài 1. Lỗi và các loại lỗi
Có 2 loại
lỗi xuất hiện trong một trò chơi: lỗi compile time và lỗi runtime.
Lỗi compile time (biên soạn thời gian) được phát hiện bởi C2 (hoặc bất
kì các công cụ lập trình khác) khi code đang được dịch tới một trò
chơi hay khi nó đang được biên dịch. Mặt khác, lỗi runtime (thời gian chạy)
là lỗi ko được phát hiện khi đang biên dịch, nhưng xuất hiện khi trò
chơi được chơi.
Lỗi thời
gian biên soạn thường xuất hiện vì một số mã ko được viết chính
xác, hoặc có thể chúng ta đang cố truy cập vào một biến chưa được
tạo. Thông thường, sẽ không có lỗi thời gian biên soạn trong C2, bởi vì
nó được thiết kế thân thiện với người mới và bạn ko thể làm
điều gì đó chẳng hạn như truy cập vào một biến không tồn tại.
1. Giải quyết lỗi thời gian chạy
Được rồi,
vậy điều gì thường gây ra lỗi thời gian chạy trong C2? Những lỗi xuất
hiện khi ta không viết code đầy đủ, rõ ràng cho C2 hiểu. Hãy cùng nói
rằng bạn đang viết một dòng mã chạy ở đầu cấp độ và trong thời
điểm đó, bạn muốn hiện một cửa sổ pop up nói rằng Level 1 begin!. Bạn muốn cửa sổ pop
up xuất hiện rồi biến mất ở đầu cấp độ.
Để làm như
vậy, bạn cần thêm một đối tượng Text
vào trò chơi và sau đó đưa cho nó một hành vi Fade để nó sẽ biến mất dần. Sau đó, bạn sẽ thêm mã code
để chạy vào đầu layout để trình văn bản ở giữa màn hình. Bạn ko
cần làm bất cứ thứ gì với văn bản sau khi nó được tạo, bởi vì
hành vi sẽ tự động phá hủy nó. Hãy thêm đối tượng Text tới project game xe tăng ở
chương 7, đặt văn bản ở đâu đó ngoài màn hình, và sử dụng mã sau để
hiện thị văn bản tại nơi bắt đầu layout:
Hãy giả sử
rằng các mã gameplay được hoàn thành, và trò chơi có thể được chơi.
Trong trường hợp này, người chơi có thể chơi ngay khi layout bắt đầu,
cũng bao gồm thời gian khi mà txtDisplayLevel
vẫn hiển thị trên màn hình. Đây thường ko phải là điều mà chúng ta
muốn bởi vì ta muốn văn bản pop up biến mất trước tiên rồi người chơi
có thể làm bất cứ điều gì họ muốn.
Chúng ta có
thể gọi đây là lỗi bởi vì người chơi đã có thể làm điều mà lẽ ra
họ ko thể. Để sửa nó, chúng ta cần chắc chắn người chơi chỉ có thể
tương tác với cấp độ sau khi pop up bị phá hủy. Để làm điều này, ta
cần thêm một biến toàn cầu. Hãy gọi nó là gameStart và giữ nguyên giá trị ban đầu là 0.
Những gì
chúng ta muốn làm rất đơn giản, khi cửa sổ pop up bị hủy, chúng ta
sẽ thay đổi giá trị của biến toàn cầu gameStart thành 1, và trong mã gameplay, chúng ta có thể
thực hiện nó để người chơi ko thể làm gì tới trò chơi đến khi:
Bạn có thể
sửa đổi mã để trò chơi sẽ ko chơi nếu giá trị gameStart không phải là 1? Bạn chỉ cần sửa đổi các điều kiện
của sự kiện để bắt đầu trò chơi. Khi giải quyết một lỗi thời gian
chạy, chúng ta phải kiểm tra chặt chẽ những gì là sai, những gì không hoạt động như ta mong muốn. Sau đó, chúng ta sẽ xem xét đoạn mã đó
và tìm ra cách để làm nó thông suốt hơn cho C2 hiể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é.
2. Chọn đúng đối tượng
Lí do khác
khiến lỗi xuất hiện đó là chọn đối tượng sai trong code của chúng
ta. Hãy để tôi nói cho bạn biết chọn là gì: đó là quá trình lựa
chọn các đối tượng trong hệ thống sự kiện, nếu bạn ko hiểu việc
chọn hoạt động như thế nào, bạn có thể viết ra một sự kiện mà làm
gì đó với một đối tượng khác, ko phải là đối tượng mà bạn muốn.
C2 chọn các
đối tượng dựa trên điều kiện của sự kiện; nếu tất cả các điều
kiện được đáp ứng, thì các hành động sẽ được thực hiện. Xem xét
sự kiện dưới đây ở chương 6, khi playerBullet
va chạm với kẻ địch, sau đó điều kiện được đáp ứng và các hành
động có thể chạy. Khi chạy hành động, chúng ta thao tác hai đối
tượng: playerBullet và kẻ địch. C2
chỉ chọn các trường hợp của 2 đối tượng này mà đã hoàn thành điều
kiện, thay vì thao tác tất cả các đối tượng.
Bạn có thể
chọn các đối tượng sai bởi vì bạn cố gắng làm điều gì đó tớ đối
tượng ko phải trong điều kiện của sự kiện; làm như vậy sẽ thao tác
tất cả các trường hợp của đối tượng thay vì đối tượng cụ thể. Ví
dụ, trên sự kiện được thể hiện trong phần chụp màn hình trước, nếu
bạn đã cố gắng tiêu diệt một đối tượng ngôi sao, nó sẽ tiêu diệt
tất cả các ngôi sao.
3. Chọn các sự kiện phụ
Sự kiện phụ
là các sự kiện bên trong một sự kiện khác; quá trình chọn các sự
kiện phụ theo sau chúng trong sự kiện. Điều này có nghĩa là các đối
tượng được kiểm tra trong điều kiện của sự kiện phụ là những sự
kiện đáp ứng sự kiện ở trên chúng. Xem xét sự kiện tiếp theo ở
Chương 5, khi alien va vào hộp đồng xu từ bên dưới, một trong những
điều kiện cho sự kiện là alien sẽ va chạm với hộp tiền xu. Sự kiện
phụ sẽ kiểm tra có hay ko biến thực thể của đồng xu là true; hộp tiền xu được kiểm tra ở
đây đáp ứng điều kiện trong sự kiện:
4. Chọn các đối tượng không được nhắc đến
Một tình
huống nữa nơi bạn viết lên sự kiện là nơi bạn cố gắng thao túng
những đối tượng không ở trong điều kiện sự kiện. Một ví dụ ở đây là
trong chương 5, nơi chúng ta muốn chạy hoạt ảnh của alien. Ở đây, các
điều kiện của sự kiện chỉ kiểm tra nút mũi tên nào được nhấn, và
hành động là chơi những hoạt ảnh bước đi. Đối tượng duy nhất trong
điều kiện của sự kiện là đối tượng Keyboard,
không phải đối tượng alien. Trong trường hợp điều kiện không chọn một
đối tượng đang bị thao túng bởi hành động, hành động sẽ ảnh hưởng
tất cả trường hợp của đối tượng đó.
Đây là nơi
bạn nên cẩn thận, bởi vì nếu có nhiều phiên bản alien, tất cả chúng
sẽ bị ảnh hưởng. Để tránh điều này xảy ra, bạn cần làm 1 trong 2
việc:
- Đảm bảo rằng chỉ có một phiên bản alien trong layout.
- Thêm điều kiện tới sự kiện để chỉ có một phiên bản alien được chọn.
Bạn có thể
sử dụng các đối tượng không được nhắc đến như thế này khi bạn tạo một
sự kiện mà nó ảnh hưởng đến tất cả các phiên bản cùng 1 lúc; ví
dụ, bạn có thể tạo ra một đối tượng bomb tiêu hủy tất cả kẻ địch khi kích hoạt.
Bài 2. Sử dụng công cụ gỡ lỗi của Construct 2
Bây giờ, ta
đã đủ biết để cẩn thận khi viết code và chúng ta có thể tránh được
lỗi thời gian chạy. Tuy nhiên, đối khi có những lỗi mà ta ko lường
trước, dù ta đã cẩn thận như thế nào khi viết code. Trong những thời
điểm như thế này, chúng ta cần thấy C2 chạy game như thế nào. Đây là
lúc ta cần công cụ gỡ lỗi.
Trong
khi bạn có thể sử dụng công cụ gỡ lỗi ở bản C2 free, sẽ có vài
tính năng chỉ có sẵn cho bản nâng cấp. (tuy nhiên bạn ko phải lo về
vấn đề này, người VN ưu tiên dùng hàng crack :’))), trên trang chủ mình
có hướng dẫn crack rồi, xin lỗi scirra).
1. Sử dụng kiểm duyệt
Bạn có thể
sử dụng công cụ gỡ lỗi chủ yếu bằng cách gỡ lỗi từng layout. Để
làm điều này, hãy bấm vào nút Debug
layout bên phải nút Run layout
ở đầu C2:
Kích vào nó và trò chơi sẽ bắt đầu như thường lệ, ngoại trừ bạn cũng sẽ thấy công cụ gỡ lỗi (được gọi là Inspector tab) dưới trò chơi. Ở phía bên tay trái của công cụ gỡ lỗi, bạn sẽ nhìn thấy danh sách các đối tượng trong project của bạn. những con số trong ngoặc đơn cho thấy có bao nhiêu phiên bản của đối tượng đó trong layout; những đối tượng với số 0 tức là chúng chưa được tạo. Ở phái bên tay phải, bạn có thể thấy thuộc tính của đối tượng đã được chọn ở phía tay trái.
Nếu bạn thử
chạy công cụ gỡ lỗi ở chương 6, bạn sẽ nhận được một Inspector tab
như ảnh sau:
Lần đầu
thấy nó bạn có thể hơi bối rối, nhưng đừng lo, tôi sẽ hướng dẫn bạn
cách sử dụng công cụ này. Nếu bạn nhấp vào một đối tượng trong danh
sách đối tượng, danh sách này sẽ tự dộng mở rộng và hiển thị
những phiên bản của đối tượng này, theo thứ tự nó được tạo ra.
Trường hợp đầu tiên sẽ được đề là 0, thứ hai là 1, vân vân. Kích vào
chỉ số mục lục sẽ hiển thị các thuộc tính cho trường hợp đó, như
là vị trí hay các biến thực thể nếu nó có.
Tuy nhiên, sẽ rất khó để kiểm tra Inspector trong khi game đang chạy, bởi vì giá trị của thuộc tính bạn đang nhìn vào có thể thay đổi, hoặc trò chơi kết thúc vì người chơi bị đánh bại.
Đây là lí do
vì sao Inspector có nút pause/resume trong trò chơi ở phía trên bên
phải. Nút Restart được sử dụng
để bắt đầu lại layout, phòng khi bạn muốn trở về thời điểm ban đầu
để kiểm tra thứ gì. Nút Save
sẽ lưu trữ tạm thời tập tin mà bạn có thể tải bằng cách ấn nút Load; cái này rất hữu dụng nếu
bạn muốn lặp lại một phần của trò chơi, nhưng ko phải từ đầu.
Hãy thử
chạy gỡ lỗi với các trò chơi trước đây của chúng ta và nhìn những
thay đổi trong mỗi thuộc tính của đối tượng. Bạn cũng có thể kiểm
tra sự thay đổi của giá trị của biến toàn cầu, thứ bạn có thể sử
dụng để kiểm tra bất kì giá trị của biến toàn cầu mà bạn viết
trên đối tượng Text là đúng hay
sai.
Ngoài việc
chỉ xem các giá trị của thuộc tính, chúng ta cũng có thể chỉnh sửa
chúng từ inspector. Ko phải tất cả giá trị đều được thay đổi, chỉ
những giá trị trong nền trắng. Nền xám chỉ đọc chứ ko thay đổi
được. Đây là tính năng tốt nếu bạn muốn thử nghiệm.
Như bạn
thấy, chúng ta có thể kiểm tra rất nhiều thuộc tính của các đối
tượng trong layout; trong khi nó tốt khi bạn chỉ kiểm tra một thuộc
tính của một đối tượng, nó có thể hơi khó khăn để lựa chọn những
đối tượng khác nếu bạn muốn kiểm tra thuộc tính của chúng. May mắn
thay, bạn có thể "xem" các thuộc tính được lựa chọn dễ dàng bởi
sử dụng Watch tab.
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é