-->

  • Learning Construct 2 - Chương 7 - Phần 3



    4. Chơi âm thanh


    Được rồi, giờ bạn đã biết về đối tượng Audio và cách hoạt động, đã đến lúc thêm âm thanh vào trò chơi của chúng ta. Có 2 nơi chúng ta muốn chơi hiệu ứng âm thanh: khi xe tăng bắn và khi xe tăng bị phá hủy. Chúng ta sẽ chơi tệp âm thanh SFX1 cho cả 2 sự kiện; chỉnh sửa chúng như sau:

    Chúng ta sẽ chỉnh sửa sự kiện nơi xe tăng của người chơi và kẻ địch bị phá hủy:

    Ở đây, ta sẽ viết code cho sự kiện tankBase bị phá hủy:


    Nếu bạn test game bây giờ, bạn sẽ nghe thấy âm thanh khi xe tăng bắn và khi xe tăng bị phá hủy, nhưng hình như trò chơi vẫn hơi yên tĩnh. Có lẽ ta cần thêm một chút nhạc, khi chơi nhạc, hãy chắc chắn rằng bạn chơi nó trên sự kiện trigger, hoặc ko bạn có thể vô tình bắt đầu cùng một bản nhạc nhiều lần, nó sẽ làm âm thanh bị loạn xị ngậu.


    Chính vì vậy, chúng ta sẽ chơi nhạc nền ở đầu cấp độ. Chúng ta sẽ sử dụng MattOglseby-3 từ tệp Music và nhập nó vào project của ta, giống như SFX1 (hãy chắc chắn rằng bạn ko nhập tệp .ogg hoặc .m4a), và chơi nó ở đầu layout:




    Test game bây giờ, bạn có cảm thấy thêm nhạc nền vào khiến trò chơi thú vị và hấp dẫn hơn ko ^^.


    Bài 3. Khiến kẻ địch thông minh hơn

    Chúng ta đã tạo ra kẻ địch ở ví dụ trước, những kẻ địch này đang rơi xuống màn hình và bắn, nhưng bây giờ ta sẽ làm cho chúng khôn hơn. Chủ đề về AI là một quá trình phức tạp, và rất khó để đề cập trong chương này. Vì thế, thay vì những lí thuyết về AI, tôi sẽ trình bay cho bạn xem bằng kĩ thuật, tuy ko chi tiết nhưng cx dễ hiểu hơn.

    1. Cho phép kẻ địch đi tuần


    Điều đầu tiên ta muốn làm với kẻ thù là cho chúng khả năng di chuyển xung quanh màn hình, giống như đơn vị của chúng ta. Để làm điều này, ta cần thêm hành vi Timer cho đối tượng enemyBase để nó có thể làm điều gì đó liên tục. Chúng ta cũng cần thêm một biến thực thể cho nó để ghi lại trạng thái của kẻ thù; chúng ta ko muốn chúng cứ di chuyển khi đang bắn mục tiêu của ta. Đặt tên biến thực thể này là patrolling và loại Boolean; đừng quên thay đổi giá trị ban đầu thành true.

    Chúng ta muốn kẻ địch đi tuần mỗi vài giây, nhưng để trông nó thực tế hơn, chúng ta sẽ ngẫu nhiên hóa khoảng thời gian mà đối tượng timer kích hoạt để xe tăng của kẻ địch ko di chuyển cùng lúc đó. Chúng ta chỉ kích hoạt timer này 1 lần bởi vì trong khoảng thời gian tuần tra tiếp theo cũng được chọn ngẫu nhiên và có thể ko giống cái này.




    Khi timer được kích hoạt, enemyBase sẽ sẽ tìm một điểm trên màn hình; vị trí này ngẫu nhiên để kẻ địch đi tới những nơi khác nhau. Tìm một điểm bất kì trên layout nghãi là ta muốn giá trị ngẫu nhiên giữa 0 và chiều rộng của layout cho điểm x và giá trị giữa 0 và chiều dài của layout cho điểm y. May thay, C2 có một biểu thức cho điều này: layoutWitdth và layoutHeight. Ta có thể sử dụng chúng để lấy giá trị chiều dài và chiều rộng của layout:


    Sau đó, kẻ địch sẽ tìm vị trí đi tuần của mình và con đường để tới đó, chúng chỉ cần đi qua nó.


    Sau khi tới vị trí đó, kẻ địch sẽ bắt đầu đi tuần, chúng ta làm điều này tương tự với cách chúng ta bắt đầu đi tuần ở đầu layout:


    Chúng ta cũng cần xem xét tình huống khi kẻ địch gặp đơn vị của người chơi khi đang đi tuần. Chúng ta muốn kẻ địch dừng lại nơi gặp đơn vị ngừoi chơi và bắn, thay vì bắn trong khi di chuyển. Chính vì vậy, ta sẽ dừng đơn vị kẻ địch ở đây và chúng ta sẽ thay đổi giá trị biến thực thể patrolling thành false, bởi vì nó ko tuần tra bây giờ nữa:


    Test game bây giờ và bạn sẽ thấy kẻ địch dừng trước khi bắn.



    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. Tạo ra người chỉ dẫn cho kẻ địch


    Kẻ địch có thể đi tuần trên chiến trường trò chơi, nhưng ko có ai hướng dẫn chúng, chúng sẽ chỉ đi loanh quanh ko mục đích. Để khiến cho chúng nhanh nhạy hơn, chúng ta có thể tạo một người chỉ dẫn cho chúng. Người chỉ dẫn này sẽ tìm kiếm người chơi và nói cho các đơn vị khác biết người chơi ở đâu.

    Chúng ta sẽ thêm một sprite object mới như một người chỉ dẫn; về hình ảnh, ta sẽ sử dụng red_sliderRight từ tệp Base pack. Giống như chúng ta làm với enemyBase, chúng ta sẽ thêm hành vi Pathfinding cho đối tượng này, chúng ta cũng thêm hành vi Turret cho đối tượng này. Hành vi Turret sẽ ko bắn người chơi mà sẽ phát hiện ra người chơi mà nó nhắm vào. Do đó, ta ko muốn nó xoay, vì vậy hãy thiết lập thuộc tính Rotate thành No.




    Bây giờ, nó đã săn sàng tìm kiếm đơn vị của người chơi.

    Logic cho đơn vị hướng dẫn là như này: nó sẽ đi lang thanh tại một khu vực được chỉ định để tìm kiếm đơn vị của người chơi; nếu nó tìm thấy người chơi, nó sẽ thông báo cho tất cả các đơn vị khác vị trí của người chơi để tất cả kẻ địch đến đó.

    Chính vì vậy điều đầu tiên chúng ta cần làm là nói cho đơn vị hướng dẫn tìm kiếm người chơi, điều này được làm bởi thêm đơn vị của người chơi như mục tiêu của nó:




    Sau đó, chúng ta sẽ nói với đối tượng enemyScout đi tới một điểm bất kì trên layout để tìm kiếm xe tăng của người chơi. Điều này cũng tương tự như khi ta muốn xe tăng địch đi xung quanh, ngoại trừ việc ta ko muốn nó tìm kiếm toàn bộ layout. Chúng ta chỉ cần người chỉ dẫn tìm kiếm một nửa layout để khiến chúng dễ dàng và nhanh chóng hơn khi tìm kiếm người chơi.

    Chính vì vậy, thêm hành vi Timer cho người chỉ dẫn, giống như chúng ta đã làm với các đơn vị kẻ địch khác. Và giống như thế, chúng ta sẽ bắt đầu bộ đếm để tìm kiếm ở đầu layout:




    Khi bộ đếm được kích hoạt, người chỉ dẫn sẽ bắt đầu tìm kiếm. Giống như các đơn vị kẻ địch khác, những người tìm kiếm sẽ di chuyển trên đường và bắt đầu scout timer sau khi đi tới một vị trí ngẫu nhiên nó nhận khi bộ đếm bắt đầu.


    Chúng ta sẽ xác định điều gì sẽ xảy ra nếu người chỉ dẫn tìm thấy xe tăng của người chơi. Chúng ta quyết định rằng người chỉ dẫn sẽ thông báo cho các đơn vị khác về địa điểm của nó. Nhưng chúng ta làm như thế nào? Chúng ta có thể sử dụng mảng để lưu trữ 2 giá trị: vị trí x sẽ được lưu trữ ở mục lục số 0 và mục lục số 1 sẽ được lưu trữ ở vị trí y. Bằng cách này, khi chúng ta muốn đơn vị kẻ địch khác đi tới, chúng ta chỉ cần bảo chúng nhìn vào mảng này.

    Vì vậy hãy thêm một mảng vào project và gọi nó là scoutArray; chúng ta sẽ điền vào mảng này khi người chỉ dẫn phát hiện ra đơn vị của người chơi. May thay, có một trigger có thể sử dụng cho tình huống này: On turret target acquired. Trigger này được kích hoạt khi đối tượng tìm thấy mục tiêu trong phạm vi; đây là khi ta muốn lưu trữ vị trí x và y của đối tượng tới mảng.




    Được rồi, cái này sẽ lưu trữ vị trí mà ta muốn các đơn vị khác đi tới. Để làm cho các đơn vị khác đi tới địa điểm này, chúng ta cần thêm một hành động như sau:




    Điều này sẽ khiến eneemyBase tìm đường đến nơi mà người chỉ dẫn bảo. Bạn có thể test game để thấy nó hoạt động, nhưng trước đó, ta nên vô hiệu hóa hành động bắt đầu đếm giờ của đối tượng enemyBase ở đầu layout để những đối tượng kẻ địch ko di chuyển đến khi người chỉ dẫn tìm thấy người chơi.


    Tổng kết


    Chúng ta đã đề cập rất nhiều thứ trong chương này. Bạn đã học về một container trong C2, về những đặc điểm của nó và cách nó hoạt động. Bạn cũng được học về hai hành vi mới: hành vi Pin để dễ dàng theo dõi một đối tượng và hành vi Pathfinding để tìm kiếm một con đượng và di chuyển bên trên nó. Bạn cũng biết được rằng hành vi Pathfinding có thể trốn tránh kẻ thù trên màn hình.

    Một hành vi khác mà tôi đã đề cập trong chương này là hành vi Turret – có thể nhận ra mục tiêu và bắn chúng. Bạn cũng biết hành động dùng để cuộn layout mà không cần sử dụng hành vi Scroll to. Bạn đã được học cách nhập âm thanh vào C2 và đâu là loại tệp tốt nhất để nhập, cho dù là thêm chúng vào tệp Music hoặc Sounds, và cách chơi chúng trong trò chơi với đối tượng Audio. Cuối cùng, chúng ta sử dụng giá trị được lưu trữ trong một mảng trong gameplay, thay vì chỉ sử dụng nó để lưu trữ điểm cao của người chơi.

    Hãy thử tự mình phát triển trò chơi này. Điều gì sẽ xảy ra ở cuối game? Bạn có cần thêm một màn chơi nữa sau khi thắng? Hệ thống điểm số có đúng vị trí không? Bạn có thể thêm bảng xếp hạng vào cuối game chứ? Có rất nhiều sự lựa chọn để phát triển trò chơi này. Hãy cố gắng lên nhé ^^.

    Thật sự có rất nhiều thứ, và chúng ta đang bắt đầu một trò chơi khá phức tạp. Tuy nhiên, có lẽ tất cả chúng ta đều biết rằng tất cả các trò chơi đều có một số lỗi nhất định. Đó là tại sao họ lại thử nghiệm rất nhiều và QA (Quality Assurance) – một quá trình ngăn chặn lỗi trong trò chơi trước khi nó được xuất bản. Tiếp theo, chúng ta sẽ nghiên cứu về kiểm tra lỗi trong C2.


    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