-->

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



    6. Tạo kẻ thù

    Chúng ta đã hoàn thành đơn vị của chúng ta, bây giờ, hãy tạo ra các đối tượng kẻ địch. Về đối tượng kẻ địch, chúng ta sẽ sử dụng kĩ thuật tương tự khi ta tạo xe tăng của chúng ta, thêm 2 đối tượng vào 1 container. Về đối tượng enemyBase, chúng ta sẽ sử dụng sprite buttonSquare_beige_pressed và với enemyTuret, ta sẽ sử dụng arrowBlue_right.

    Sau khi ta thêm chúng vào layout, chúng ta sẽ cùng đặt chúng vào trong cùng 1 container. Theo quá trình tương tự với xe tăng của người chơi, nhưng là với các đối tượng xe tăng của kẻ địch. Chúng ta cũng sẽ thêm hành vi Pin tới enemyTurret và giống như tankTurret, ta sẽ ghim nó vào enemyBase khi nó đc tạo:

    Đặt 2 đối tượng như thế cách xa xe tăng người chơi một chút những vẫn ở trong layout, bởi vì ta sẽ giúp chúng di chuyển và tìm kiếm người chơi. Đừng quên đặt chúng lên nhau như sau:


    Chúng ta sẽ làm một điều nữa trước khi hoàn thiện kẻ địch: khiến nó có thể tìm kiếm người chơi. Vậy ta làm điều này như thế nào? Vâng, chính là hành vi Pathfinding, thêm nó vào đối tượng enemyBase, thế là xong. Chúng ta sẽ giữ thuộc tính của Obstacle là Solid cho kẻ địch.

    Bài 2. Làm nòng súng bắn


    Chúng ta có nòng súng cho cả 2 đơn vị xe tăng của người chơi và kẻ địch, nhưng bây giờ, chúng không làm gì cả, chính vì vậy hãy khiến chúng có thể bắn. ‘’Bắn’’ tức là nó nhận ra mục tiêu của nó, xoay nòng súng và nhả đạn vào mục tiêu của nó. May mắn cho chúng ta, C2 có một hành vi có thể làm tất cả điều này: đó là hành vi Turret. Chính vì vậy, hãy thêm vào cả hai tankTurret và enemyTurret.

    Sau khi thêm hai hành vi này vào nòng súng, chúng ta cần xác định đối tượng nào là những mục tiêu cho nòng súng. Chúng ta sẽ làm điều này bởi sử dụng hành động add object to target để nòng súng tự động bắn đối tượng được chỉ định khi nó ở trong phạm vi. Chúng ta muốn tankTurret chọn đơn vị kẻ địch, chính vì vậy ta thêm đối tượng này vào mục tiêu của nó:


    Chúng ta muốn enemyTurret chọn đơn vị của người chơi, vì vậy ta thêm nó vào danh sách mục tiêu:




    Bây giờ, nếu chúng đi vào phạm vi của nhau, các sự kiện sau sẽ xảy ra:
    • Đối tượng tankTurret sẽ nhận ra đối tượng enemyTurret như là mục tiêu.
    • Trong trường hợp này, sự kiện On target acquired sẽ kích hoạt và nòng súng sẽ quay tới mục tiêu của nó.
    • Khi nòng súng chỉ vào mục tiêu, sự kiện On shoot sẽ kích hoạt tại tỉ lệ được xác định bởi rate of fire.

    Hãy nhớ rằng đối tượng nòng súng ko tự động bắn, chúng ta phải tạo một đối tượng với hành vi Bullet để kích hoạt viên đạn, vì vậy hãy làm điều này ngay bây giờ. Thêm 2 sprite object với kích cỡ 14x14, làm chúng với hình dạng vòng tròn và đặt tên là playerBullet và enemyBullet. Đặt chúng bên ngoài layout và cung cấp cho chúng hành vi Bullet, thêm destroy outside layout cho chúng.

    Chúng ta sẽ tô playerBullet màu xanh dương và enemyBullet màu đỏ. Sau đó ta cần thêm code. Giống như tôi đã giải thích từ trước, khi nòng súng nghĩ nó có thể bắn, nó sẽ kích hoạt sự kiện On shoot. Trong sự kiện này, chúng ta sẽ tạo viên đạn của người chơi và bắn nó ở góc cùng với nòng súng:

    Làm điều tương tự với nòng súng của kẻ địch:



    Với điều này, nòng súng sẽ bắn những mục tiêu của nó. Cuối cùng, hãy phá hủy các viên đạn hơn là để chúng bay ra khỏi màn hình. Có 2 kịch bản khi viên đạn bị phá hủy: khi chúng trúng tankBase và khi chúng trúng enemyBase. Để thêm một lối chơi thú vị hơn, hãy tạo biến thực thể sinh mạng của playerBase và enemyBase.

    Trong ví dụ này, chúng ta sẽ cung cấp giá trị ban đầu là 10 tới biến thực thể sinh mạng của cả 2 đối tượng, và ta sẽ giảm nó từng chút một:


    Ở đây, ta sẽ viết code cho sự va chạm của viên đạn với tankBase:




    Đừng qên phá hủy đối tượng khi sinh mạng của tankBase và enemyBase tiến tới 0; nếu ko thì ko có gì xảy ra. Chúng ta muốn những đối tượng này bị phá hủy khi sinh mạng của chúng từ 0 trở xuống:



    Ở đây ta sẽ viết code cho sự kiện tankBase destroy:




    1. Điều hướng qua level


    Bây giờ chúng ta đã tạo ra đơn vị của chúng ta cùng với kẻ thù, giờ hãy tạo ra một cấp độ. Chúng ta sẽ thêm một vài đồng đội và kẻ thù trên layout, cũng như các trở ngại. Bạn có thể thiết kế như sau:




    Bây giờ ta đã có một trò chơi mà bố cục của nó lớn hơn màn hình trò chơi, và chúng ta muốn điều hướng xung quanh nó. Trước đây, chúng ta đã có thể điều hướng bằng cách sử dụng hành vi Scroll To, nhưng bây giờ chúng ta có nhiều hơn một đơn vị mà người chới có thể điều khiển. Chính vì vậy tôi muốn điều hướng xung quanh layout mà ko cần hành vi Scroll To. Vậy ta làm như thế nào?



    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é.


    Chúng ta sẽ sử dụng đối tượng Mouse để cuộn layout. Nếu người chơi đặt chuột vào bên phải màn hình thì màn hình sẽ cuộn sang bên phải; nếu người chơi đặt chuột sang bên trái thì màn hình sẽ cuộn sang bên trái (bạn có thể thấy rất rõ điều này trong game Dota2), tương tự bên trên và bên dưới. Chúng ta sẽ sử dụng các biểu thức của đối tượng Mouse, absoluteX và absoluteY, sẽ cho chúng ta tọa độ x và y trên màn hình.


    Điều khác biệt của biểu thức thông thường mouse. X hoặc mouse. Y là cho chúng ta tọa độ x và y trên layout và do đó bị ảnh hượng bởi việc cuộn. Cả 2 biểu thức absoluteX và absoluteY ko bị ảnh hưởng bởi việc cuộn, chính vì vậy chúng hoàn hảo nếu bạn muốn biết vị trí chuột trên màn hình.

    Đầu tiên, ta sẽ cuộn sang trái khi vị trí con chuột gần cạnh bên trái màn hình, cách chúng ta biết điều này là nếu vị trí x của con chuột là số nhỏ, ví dụ nếu nó nhỏ hơn 20 pixel, chúng ta sẽ cuộn nó với số lượng 500 pixel trên giây. Trong hành động này, chúng ta sẽ sử dụng biểu thức dt; ở đây, dt là biểu tượng cho thời gian delta, đó là thời gian chênh lệch giữa mỗi lần tích. Chúng ta sẽ nhân tốc độ cuộn với dt để đảm bảo di chuyển chính xác ngay cả trên các máy tính chậm.




    Tiếp theo, chúng ta sẽ cuộn màn hình sang bên phải. Để làm điều này, chúng ta cần biết như vị trí x của chuột là 20 pixel từ bên trái màn hình. May mắn thay, có một biểu thức kiểm tra độ rộng của cửa sổ: WindowWidth (khá rõ rảng nhỉ ^^). 20 pixel từ bên tay phải có nghĩa là 20 pixel được trừ từ biểu thức WindowWidth:


    Sau đó, khi ta cuộn màn hình lên, làm tương tự khi ta cuộn sang trái nhưng ta sẽ kiểm tra giá trị absolute Y thay vì absolute X. Chúng ta cũng sẽ cuộn nó trong hướng y để khiến nó đi lên:


    Cuối cùng, chúng ta cuộn màn hình xuống. Để làm điều này, chúng ta cần biết chiều cao của màn hình, giống với khi bạn cuộn sang phải. Chúng ta cũng có một biểu thức cho điều này, đó là WindowHeight:


    Test game bây giờ, và bạn có thể điều hướng layout bằng cách sử dụng chuột.

    2. Thêm nhạc và hiệu ứng âm thanh


    Chúng ta đã có một cơ sở khá tốt cho trò chơi, nhưng vẫn còn một điều còn thiếu, đó là âm thanh. C2 có một loại object có thể xử lí bất kì loại âm thanh nào trong trò chơi: Audio object. Đối tượng này có thể chơi được các hiệu ứng âm thanh và nhạc nền. Vì thế, chúng ta hãy thêm đối tượng này vào trò chơi.


    Trước khi chúng ta sử dụng đối tượng Audio để chơi nhạc, chúng ta cần nhập những tệp âm thanh. Nếu bạn nhìn vào thanh Projects, có 2 nơi mà âm thanh có thể được nhập: Sound folder và Music folder.

    Các tệp trong tệp Sound sẽ được tải trước khi chúng được chơi, nó rất hoàn hảo cho những tệp âm thanh ngắn  như hiệu ứng âm thanh. Mặt khác, các tệp trong tệp Music sẽ được phát từ máy chủ thay vì được tải từ máy tính của người chơi. Điều này phù hợp với nhạc nền dài, chính vì vậy, những tệp có thể được chơi mà người chơi ko cần phải đợi vài phút để tệp đó load. Tuy nhiên, âm nhạc có thể bị tràn trong khi phát, điều này có thể gây chậm trễ.


    Các âm thanh chúng ta sẽ sử dụng trong ví dụ này lấy từ tệp Sound FX; nhạc nền thì nằm ở tệp Music. Để nhập các hiêệu ứng âm thanh, chúng ta bấm chuột phải vào tệp Sounds ở C2 và lựa chọn Import Sound. Sau đó, một cửa sổ sẽ mở ra nơi bạn có thể tìm kiếm các tập tin dự định cho âm thanh. Bây giờ ta sẽ chọn một tệp, đó là SFX1.wav ở tệp Sound FX.

    Sau đó, bạn sẽ thấy một cửa sổ khác sẽ chuyển đổi các tập tin để tương thích với trình duyệt. Nếu biểu tượng bên cạnh tệp là màu xanh lá cây thì tốt.




    Sau khi bạn kích vào nút Import, C2 sẽ chuyển đổi các tập tin để tương thích với các trình duyệt web phổ biến. Quá trình này giống như quy trình để nhập nhac: kích chuột phải vào tệp Music và lựa chọn tệp. Trong ví dụ này, chúng ta sẽ sử dụng MattOglseby-3 và sau đó nhập nó. Bây giờ ta đã có những tệp yêu cầu để thêm hiệu ứng âm thanh và nhạc nền.

    3. Chọn đúng tệp


    Có một điều cần ghi nhớ là khi nhập các tệp âm thanh vào C2: file types. Ngay cả bây giờ, các nhà sản xuất trình duyệt vẫn ko thể đồng ý một dạng âm thanh được hỗ trợ trên trình duyệt của họ. Internet Explorer và Safari vẫn sử dụng định dạng  MPEG – 4 AAC (.m4a file). Trong khi FireFox, Chrome, Opera hỗ trợ Ogg Vorbis miễn phí.

    Vì vậy, để hỗ trợ hết các trình duyệt có sẵn, chúng ta cần cung cấp cả 2 loại tệp cho 1 âm thanh. Tuy nhiên, nếu bạn ko thể, bạn chỉ có thể cung cấp các tệp PCM.wav cho âm thanh, vì loại tệp này được hỗ trợ rộng rãi, và C2 có thể chuyển nó sang cả 2 định dạng MPEG – 4 AAC và Ogg Vorbis.


    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