-->

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



    6. Di chuyển tới cấp độ khác

    Một game platformer mà chỉ có một cấp độ thì quá nhàm chán; chính vì vậy ta sẽ thêm những cấp độ mới khó hơn và điều hướng đến nó. Đầu tiên, tạo một layout mới, mở thành Project và ấn chuột phải vào tệp Layouts. Kích vào Add layout để thêm layout mới. Một cửa sổ sẽ hiện ra hỏi bạn có muốn thêm event sheet hay ko. Cái này thì tùy bạn nhưng bây giờ ta sẽ thêm một event sheet cùng với nó.


    Sau khi kích vào nút Add event sheet, bạn sẽ thấy một layout trống; chúng ta sẽ thiết kế level thứ hai ở đây (nó không thực sự là một level trong game vì nó rất ngắn, mà tôi không biết gọi ra sao nên gọi tạm thế :’))). Một điều cần lưu ý là trong thiết kế layout mới, bạn không cần thêm object mới; bạn có thể thêm một object từ layout khác nếu bạn muốn.

    Nhớ rằng tuy layout mới hoàn toàn “ mới “ nhưng không có nghĩa là nó cùng layer với layout cũ, cho đến khi bạn quyết định thêm chúng. Bạn cũng có thể thay đổi kích thước của layout mới nếu bạn muốn.

    Để làm điều này, hãy nhìn vào thanh Projects, bạn sẽ thấy tất cả những object mà bạn đã thêm vào project của mình  được liệt kê ở tệp Object. Để thêm các object đã có vào layout mới, kéo thả object đó từ tệp Object tới layout. Nhớ rằng bạn không thể thả object đã tồn tại mà cùng kiểu với object đã được thêm vào toàn bộ dự án, ví dụ Keyboard Touch object đã được thêm vào toàn bộ dự án.
    Bây giờ ta đã có layout mới, hãy thiết kế nó để có các object như: gressMid, boxAltboxEmpty giống như ở layout thứ nhất. Trước khi ta di chuyển đến layout mới trong trò chơi, ta cần phải làm một số thứ để kết nối 2 layout với nhau. Ở đây ta sẽ dùng một cánh cửa, thêm 2 object mới từ tệp Tiles trong tệp Base pack trong free bundle, đó là door_openMiddoor_openTop­ và đặt chúng vào cạnh layout như sau:

    Logic của việc thay đổi này là: khi nhân vật va chạm với cánh cửa, thay đổi vị trí sang layout mới. Bạn có thể thiết kế logic của riêng bạn trong trò chơi của bạn, ví dụ như chơi phải nhấn nút … Code ở đây như sau:


    Nếu bạn test game bây giờ, bạn có thể thấy chúng ta đã đi được sang layout 2. Tuy nhiên, có một điều rất lạ, chúng ta không thể di chuyển bất cứ thứ gì ở layout mới. Chính xác, đó là do ta không đặt alien object vào đó, chính vì vậy hãy thêm alien object vào layout 2 như sau:


    Test nó và bạn sẽ thấy ta có thể di chuyển tới layer 2 và di chuyển nhân vật của chúng ta ở layout mới. Tuy nhiên, nhân vật của chúng ta không có hoạt ảnh; tại sao thế ? Điều này là do mỗi layout có event sheet của riêng nó và ta chỉ thiết lập animation của nhân vật trong layout 1.

    Tất cả layout có event sheet của riêng nó. Nếu bạn thêm animation cho 1 object ở layer này, nó vẫn sẽ không có hoạt ảnh ở layer khác. Để tạo hoạt ảnh cho object ở layer khác, bạn chỉ cần copy sự kiện. Để làm điều nay, bạn chỉ cần giữ Ctrl và nhấp vào tất cả sự kiện bạn muốn sao chép, nhấn Ctrl C, đi tới event sheet của layout mới và nhấn Ctrl V.

    Event sheet của layout mới được liệt kê trong tệp Event sheet ở thanh Projects, nháy đúp chuột để mở nó, sau đó dán các sự kiện hoạt ảnh vào đó.

    Khi sao chép sự kiện, hãy chắc chắn là kích vào sự kiện, không phải là tình huống trong sự kiện. Sao chép sự kiện và sao chép tình huống là 2 việc khác nhau.

    Nếu bạn sao chép sự kiện, bạn có thể dán vào event sheet khác hoặc cùng một event sheet. Tuy nhiên, nếu bạn sao chép điều kiện, bạn chỉ có thể dán chúng vào sự kiện khác có thể; ví dụ bạn ko thể đặt hai điều kiện kích hoạt trong cùng 1 sự kiệ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é.


    7. Đập vào hộp tiền xu

    Nếu bạn vẫn nhớ, chúng ta còn có 1 hộp tiền xu mà chưa thao tác. Chúng ta sẽ thiết lập nó để khi người chơi đập vào từ bên dưới thì nó sẽ tạo ra 1 đồng xu.

    Cái hộp này chính là một biến thực thể (instance variable) sẽ xác định có tiền xu bên trong hay ko. Khi người chơi va chạm với cái hộp từ bên dưới, chúng ta sẽ kiểm tra biến thực thể này. Nếu giá trị là true, nó sẽ đẻ ra 1 đồng xu; còn nếu là false thì sẽ không có gì xảy ra. Chúng ta cũng sẽ thay đổi sprite dựa trên biến thực thể này để chỉ rõ cho người chơi biết có đập được vào hay ko.

    Đầu tiên, tạo một biến thực thể là hasCoin loại Boolean và thay đổi giá trị ban đầu của nó thành true. Sau đó, chuyển tới event sheet. Chúng ta kiểm tra sự va chạm từ bên dưới, vì vậy ta sẽ sử dụng sự kiện On collision so sánh với tọa độ y của alien với cái hộp. Nếu tọa độ của alien lớn hơn cái hộp thì tức là alien ở dưới cái hộp. Sau đó, ta sử sử dụng một sự kiện phụ để kiểm tra giá trị của biến thực thể Boolean:


    Tôi vẫn chưa viết hành động cho nó do ta muốn sinh ra một object thì ta phải tạo ra nó trước tiên. Chèn một sprite object mới và đặt tên nó là coinGold. Bạn có thể lấy sprite này từ tệp Items trong tệp Base pack và đặt nó ở đâu nó màn hình. Chúng ta muốn thay đổi sprite của object boxCoin, chính vì vậy ta sẽ thêm hoạt ảnh cho nó. Nháy đúp chuột vào cái hộp để mở cửa sổ chỉnh sửa hình ảnh. Thêm một animation mới được gọi là Disabled, cho nó hình ảnh của boxCoin_disabled từ tệp Tiles, sau đó đóng cửa sổ chỉnh sửa hình ảnh.

    Chúng ta muốn coinGold object làm 2 điều khi ta tạo nó: di chuyển từ từ lên trên và dần dần biến mất. Ta có thế làm thế với những hành vi này: hành vi Bullet có thể sử dụng để di chuyển lên trên, và để nó di chuyển chậm lại, ta chỉ cần giảm tốc độ của nó. Để nó biến mất từ từ, chúng ta sẽ sử dụng hành vi mới được gọi là Fade. Hành vi Fade sẽ thay đổi độ mờ của đối tượng theo thời gian và mặc định phá hủy đối tượng khi nó vô hình. Thêm hai hành vi này vào coinGold object và thiết lập tốc độ hành vi Bullet thành 200 (hoặc thấp hơn nếu bạn muốn). Đừng quên thêm hành vi Solid cho boxCoin để chúng ta có thể va chạm với nó.

    Chuyển tới event sheet ở layout 1; chúng ta chỉ cần thêm hành động tới sự kiện phụ hasCoinI của object boxCoin. Bạn muốn tạo đồng xu mới ở đây, thiết lập góc của sự di chuyển lên trên để nó di chuyển lên trên, thay đổi hoạt ảnh của boxCoin để người chơi biết nó đã ko còn tiền xu, và cuối cùng thiết lập biến thực thể hasCoin thành false.


    Bây giờ, ta có thể test thử game. Nhớ rằng sau khi có nhiều hơn 1 layout trong project, bạn cần chắc chắn rằng layout bạn lựa chọn cuối cùng trước khi test là layout bạn muốn test. Đây là C2 luôn luôn chạy layout được mở lần cuối khi test; nếu bạn mở layout 2 trước đó, hãy mở layout 1 trước khi test. Lưu dự án của bạn trước khi tiếp tục, bởi vì bạn sẽ học một vài thứ mới.

    Bài 2. Học về vật lí

    Chúng ta sẽ thảo luận về vật lí trong C2. Để áp dụng vật lí vào một object, ta chỉ cần thêm hành vi Physics vào nó. Tất cả object với hành vi Physics có thể gọi là những physic object. Vật lí là một chủ đề phức tạp, tôi sẽ chỉ giải thích nó một cách ngắn gọn để đề cập đến những gì bạn cần biết để bắt đầu thử nghiệm nó.

    Nếu bạn còn nhớ về những khái niệm vật lí mà bạn đã học thì rất hữu ích, nó khá giống nhau. Chúng ta sẽ tạo ra layout 3 để chứng minh physic object của chúng ta, chính vì vậy hãy tạo layout mới và thiết kế nó như thế này:


    Như các bạn có thể thấy, chúng ta đã sử dụng 2 solid object mà chúng ta đã sử dụng để xây dựng những level trước của ta. Tuy nhiên, chúng ta sẽ thêm một sprite object mới được gọi là rock; sprite cho object rock có thể được tìm thấy ở ttepj Base pack / Items. Hòn đá sẽ ko làm bất cứ gì cả, nhưng ta sẽ sử dụng nó như physic object, vì vậy hãy thêm một hành vi Physics vào nó.

    Một điều cần nhớ là, tất cả hành vi Physic đều bị ảnh hưởng bởi lực hấp dẫn, tức là nó sẽ tự động rơi xuống nếu không có gì ngăn nó lại.

    Nếu chúng ta test layout 3, chúng ta sẽ mong được thấy hòn đá rơi xuống và đập vào mấy cái thùng đang nổi. Không may thay, điều này sẽ ko xảy ra. Tảng đá vẫn sẽ tiếp tục rơi qua mấy cái thùng và mặt đất. Tại sao? Vì đơn giản là những physic object chỉ tương tác với physic object, nó sẽ ko tương tác với các object khác có hành vi Solid hay Jump-thru.

    Tại sao lại vậy? Tại sao C2 lại không làm cho các solid object có thể tương tác với physic object? Câu trả lời là mặc dù các physic object cũng có thể coi là solid object nhưng solid object ko thể coi là physic object. Có thể bạn ko biết, ĐỊnh luật 3 Niu tơn nói rằng mọi hành động đều có sự phản ứng ngang nhau và ngược lại. Trong trò chơi của chúng ta, điều này có nghĩa là khi một physic object va chạm với cảnh qan, chẳng hạn như là cái thùng gỗ, sẽ bị đẩy lại một chút. Solid object không thể tính toán được va chạm này, do đó physic object đã bỏ qa chúng. Để làm cho cảnh quan tương tác với physic object, chúng ta phải khiến cảnh quan trở thành physic object.

    Physic object chỉ tương tác với physic object, thế nên để physic object tương tác với một cảnh quan, hãy thêm hành vi Physics cho nó.

    Đợi 1 chút; nếu chúng ta thêm hành vi Physics cho cái thùng đang nổi thì liệu nó có rơi xuống như hòn đá không ta? Tôi có nói là tất cả các physic object đều bị ảnh hưởng bởi lực hấp dẫn phải ko nhỉ? Đúng thế, ngoại trừ các physics object không thể di chuyển. Physics object ko thể di chuyển sẽ ko di chuyển khi bị ảnh hưởng bởi trọng lực hay các vật thể khác, mục đích duy nhất của chúng chính là ngăn cản các physics object khác.

    Để khiên một physics object không thể di chuyển, chúng ta chỉ cần thay đổi giá trị của thuộc tính Immovable. Bây giờ, hãy thêm hành vi Physics cho boxAlt và thay đổi thuộc tính Immovable thành Yes, như ở màn ảnh sau:


    Test game bây giờ, bạn sẽ thấy tảng đá va chạm với cái thùng y như ta mong đợi.

    Bây giờ, có thể bạn sẽ tự hỏi khi nào thì dùng solid object, khi nào thì sẽ sử dụng physics object ko di chuyển. Đây là một quy tắc đơn giản:

    • Nếu bạn muốn người chơi sau này có thể tương tác với object, bạn có thể sử dụng physics object ko di chuyển. Ví dụ có một cái hộp mà người chơi ko di chuyển đc, nhưng vào một ngày đẹp trời nào đó mà nhân vật của người chơi biến thành siêu nhân, có khả năng đẩy được cái hộp, thì đó là lúc xài physics object ko di chuyển, thay giá trị của Immovable thành No trong code.
    • Nếu object chỉ có tác dụng là vật cản thì nên dùng solid object
    • Nếu người chơi chỉ tương tác với object một lần, thì nên dùng solid object, ví dụ nhân vật bắn một phát đạn vào cái cửa để mở cửa.


    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