-->

  • Learning Construct 2 - Chương 8 - Phần 1



    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é

  • DONATE TINH THẦN CHO BLOG TẠI ĐÂY

    Nếu các bạn thấy blog có ích hãy ủng hộ blog hàng ngày tại đây. Chỉ cần thi thoảng chơi game và tìm bug cho tụi mình là được. Đây là ủng hộ tinh thần, không phải tiền mặt, vật chất và không bắt buộc. Xin chân thành cảm ơn ahihi. Chúc các bạn một ngày zui zẻ.

    TELEPHONE

    02273 7x2 xxx
    02273 xxx 27x

    MOBILE

    0162 x15 xx33