-->

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





    Chương 4. Tạo một game breakout

    Chúng ta đã tạo trò chơi đầu tiên của mình trong chương trước. Nếu bạn vẫn nhớ những gì chúng ta đã làm ở chương đó, chúng ta đã sử dụng biến thực thể để làm 2 việc: máy bay đập cánh và mặt đất lặp lại. Chúng ta chỉ sử dụng biến thực thể loại Boolean trong khi vẫn còn 2 loại biến khác.

    Những loại khác có thể được sử dụng để thao tác một object; nếu bạn thấy Mario trở nên lớn hơn sau khi ăn nấm hoặc bất tử sau khi ăn được một sao, đó là những ví dụ về việc thay đổi trạng thái của một object. Chúng ta có thể tạo ra một thứ như thế ở chương này:

    Trong chương này, chúng ta sẽ đề cập đến các chủ đề sau:

    • Thêm nhiều cách để sử dụng biến thực thể.
    • Constant variable là gì?
    • Expression là gì và cách sử dụng nó.
    • Làm sao để một object nảy lên các object khác?
    • Sub – event là gì?

    Bài 1. Tạo thiết kế

    Giống như chương trước, chúng ta sẽ bắt đầu chương này bằng cách làm thiết kế của trò chơi mà chúng ta muốn thực hiện. Có lẽ bạn đã đoán được bởi đọc tên chương rằng chúng ta sẽ tạo một game breakout. Breakout là một trò chơi mà bạn di chuyển một thanh sắt nằm ngang ở dưới cùng màn hình để tung một quả bóng và phá hủy các khối bên trên. 

    Tuy nhiên, một số khối có thể sẽ thêm một vài biến hóa. Hãy bắt đầu với tiêu chuẩn sau:

    • Elicator pitch: là miêu tả về trò chơi của bạn khi bạn giải thích cho ai đó, ngắn gọn và súc tích. Trong Trò chơi này, người chơi sẽ điều khiển một cái thanh nằm ngang để đẩy quả bóng đập vỡ các khối. Một vài khối có thể thay đổi hiệu ứng.
    • Theme: Chủ đề cho trò chơi này là trí tuệ.
    • Genre: Thể loại game trí tuệ.
    • Challenges: thử thách là phá hủy các khối ở 1 cấp độ.
    • Reward: Người chơi được cho điểm tùy theo số khối phá được và thời gian hoàn thành cấp độ, các khối cũng có thể thay đổi theo điểm số.
    • Điều kiện thắng: Tất cả các khối bị phá hủy.
    • Điều kiện thua: Mỗi lần quả bóng rơi xuống dưới màn hình trò chơi, người chơi sẽ mất 1 sinh mạng, mất hết sinh mạng là người chơi thua.
    • Dynamics: là những quy tắc áp dụng trong trò chơi, chúng tạo thành những hướng dẫn rằng game này chơi như thế nào. Ví dụ trong game chúng ta thì dynamics như sau:

    1. Quả bóng sẽ đập vào thanh nằm ngang, các khối và 3 mặt (trừ mặt dưới) của trò chơi rồi bật ra.
    2. Quả bóng không thể đập vào phần mặt dưới.
    3. Thanh nằm ngang chỉ có thể di chuyển sang trái hoặc phải.
    4. Một số khối sẽ tạo hiệu ứng đặc biệt khi bị phá hủy.

    • Mạch chính của trò chơi: định nghĩa trò chơi các trò chơi chơi như thế nào từ đầu tới cuối, từ khi bắt đầu level đến khi người chơi thắng hoặc thua:

    1. Nếu quả bóng rơi vào mặt dưới của trò chơi, người chơi mất một mạng.
    2. Nếu quả bóng đập vào một khối, khối đó sẽ bị phá hủy.
    3. Một vài khối sẽ cần đập nhiều hơn để có thể phá hủy hoàn toàn
    4. Nếu tất cả số khối bị phá hủy thì người chơi sẽ thắng

    Có khá nhiều thiết kế cho game breakout, chúng ta sẽ sử dụng thiết kế này để tạo ra một trò chơi ví dụ trong chương này.

    Bài 2. Thiết kế hệ thống phần thưởng

    Bây giờ, trước khi bắt tay vào C2, tôi muốn chúng ta đặt ra thiết kế của trò chơi này chi tiết hơn nữa. Trước tiên, tôi muốn giải thích cách tặng thưởng cho những người chơi. Ý tưởng trong đầu của tôi là khiến cho mỗi khối chứa một giá trị sao cho mỗi lần bị phá hủy, điểm số được thêm vào bởi cùng một giá trị. Tuy nhiên, vì số khối trong 1 level sẽ cân bằng cho mỗi người chơi, kết quả mỗi người bằng nhau, nên tôi quyết định thêm một yếu tố cuối cùng để thay đổi điểm số. Vì vậy, tôi thêm thời gian giới hạn cho người chơi vượt qua level.

    Tuy nhiên, vẫn chưa đủ. Điều gì sẽ xảy ra nếu có người vượt qua level ở cùng 1 thời điểm? Hoặc là chỉ chậm hơn 1 chút? Ngoài ra, những người chơi có kĩ năng có thể đánh bại các level nhanh nhất có thể, khiến cho điểm số bị giới hạn trong game. Để ngăn chặn điều này, tôi quyết định cung cấp cho trò chơi những sức mạnh đặc biệt. Những sức mạnh này sẽ xuất hiện ngẫu nhiên, và chúng sẽ biến mất sau vài giây.



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


    Bài 3. Thiết lập layout

    Bây giờ chúng ta sẽ thiết lập layout cho trò chơi. Không giống như chương trước tôi đã giải thích cách thêm object như thế nào, ở chương này, tôi sẽ chỉ nói cho bạn  thêm object khi tôi muốn bạn thêm chúng vào layout. Tôi sẽ nói chi tiết khi tôi giải thích một vài thứ mới.

    Chúng ta sẽ sử dụng các sprite ở tệp Puzzle assets. Mở C2 và tạo New empty project. Giống như lần trước, chúng ta thêm layer vào layout này, nhưng bây giờ, ta chỉ cần tạo 3 layer:

    • HUD
    • Main
    • Background

    Để HUD ở đầu và Background ở cuối.


    Thêm một sprite object vào Main layer và sử dụng paddleBlue sprite từ tệp Puzzle assets, đây sẽ là thanh chắn của chúng ta. Sau đó, thêm sprite object khác với nhiệm vụ là quả bóng; sử dụng ballBlue object. Bây giờ chúng ta đã có thanh chắn và quả bóng trong layout. Tiếp theo, chúng ta sẽ tạo đường biên cho level của chúng ta, nhưng thay vì sử dụng 1 sprite dài, chúng ta sẽ lắp ráp nó từ một sprite nhỏ. Đây là một kĩ thuật thường được sử dụng khi làm game.

    Sử dụng nhiều sprite nhỏ rồi ghép với nhau hiệu quả hơn là một sprite dài. Bởi vì khi bạn muốn tạo một sprite có kích thước khác nhưng cùng chất liệu với thì bạn không cần phải vẽ lại hay kéo dài nó ra. Điều này sẽ làm giảm chất lượng của sprite và tốn thời gian.

    Trong C2, có một cách để ghép những sprite nhỏ với nhau mà không quá khó, đó là sử dụng Tiled background object.

    1. Sử dụng Tiled background object.

    Tile background là một background được tạo bởi những sprite như những viên gạch. Nếu bạn muốn sử dụng lại một sprite nhiều hơn thì sử dụng Tile background object là tốt hơn hết bởi 2 lí do:

    • Dễ dàng hơn: Để tạo những tile mới, bạn chỉ cần kéo thả các tiled background object xung quanh và nó sẽ tạo ra các hàng và cột mới, không cần tạo phiên bản mới cho sprite. Nó cũng dễ dàng di chuyển hơn, nếu bạn cần.
    • Được coi là 1 object: Đối lập với nhiều trường hợp của object, điều này làm cho nó dễ dàng hơn đối với C2 để quản lí đối tượng một cách chính xác và giúp trò chơi của bạn ko bị lag.

    Ngoài việc được sử dụng làm biên giới của trò chơi, một tiled background object còn được sử dụng để xây dựng một game RPG, hay để xây dựng một level mới trong platformer game.

    Thêm một object mới, lựa chọn tiled background từ phần General, và đổi tên nó thành areaBorder. Bạn sẽ thấy một cửa sổ chỉnh sửa hình ảnh giống như bạn đã thấy khi bạn thêm một sprite mới; điểm khác biệt là ở đây không có animation bởi vì bạn không thể thêm animation cho tiled background. Bạn cũng không thể thiết lập đa giác va chạm cho nó. Sử dụng element_grey_square cho sprite; cái này thường được sử dụng cho các khối trò chơi, nhưng chúng ta không có các sprite thích hợp cho biên giới, vì vậy ta sẽ sử dụng nó thay thế.

    Một điều cần lưu ý là bạn không thể sử dụng bất kì hình ảnh nào của tiled background; nó phải là một hình vuông với chiều dài và rộng là 8x8, 16x16, 32x32, …

    Đóng cửa sổ chỉnh sửa hình ảnh và chúng ta đã có tiled background trong layout. Bạn có thể kéo thả một trong 8 điểm xung quanh game object (bạn có thể thấy nó khi object được lựa chọn), và thay cho việc khiến hình ảnh lớn hơn, bạn có thể thêm nhiều hàng và cột vào nó.

    Sử dụng hình ảnh với kích thước “lũy thừa 2” cũng là một thói quen tốt khi tạo sprite hoặc asset được sử dụng trong lập trình game.

    Có lẽ bạn cũng nhận ra điều này, khi bạn kéo 1 trong 8 điểm để thêm nhiều tile hơn, những tile mới khi được thêm vào sẽ không đầy đủ kích thước, mà chỉ là một phần của nó.



    Nếu đây là phần hình ảnh mà bạn muốn thì quá tuyệt vời, nhưng thường thì không phải trường hợp này. Chúng ta muốn object được thêm vào những chiều dài và rộng mới một cách chính xác của tile. May mắn là điều này rất dễ dàng trong C2: sử dụng Snap to grid. Làm theo những bước sau:

    1. Ở bên trên C2, bạn sẽ thấy 3 mục ở gần mục File: đó là Home, View Events.
    2. Kích vào mục View và chọn mục Snap to grid để căn vị trí của object và thay đổi kích thước lưới.

    Vậy lưới là gì? Nếu bạn muốn thấy lưới, bạn chọn Show grid. Sự thiết lập này chỉ làm việc trên một layout. Nếu bạn muốn làm thế với các layout khác, bạn phải check nó ở mỗi layout.

    Để dễ dàng hơn trong việc đặt object vào layout, bạn có thể thiết lập layout tới Snap to grid. Làm vậy sẽ khiến vị trí và kích thước của object theo lưới.

    Bây giờ di chuyển areaBorder và tạo nhiều biến thể của nó để tạo biên giới game như sau:


    Đã xong, giờ bạn có thể chuyển sang phần tiếp theo của game: di chuyển tấm ván.

    2. Di chuyển tấm ván về hai hướng

    Di chuyển tấm ván không phải là điều khó, bạn có thể làm điều này bởi sử dụng hành vi di chuyển (movement behavior) giống ở chương 3. Điều quan tọng nhất là chúng ta muốn tấm ván chỉ di chuyển về hai hướng trái và phải. Tôi sẽ giải thích làm cái này như thế nào bởi sử dụng game object khác: Mouse object.

    Chèn object game mới như thường lệ, nhưng lựa chọn object Mouse. Nó sẽ được thêm vào toàn bộ dự án nên bạn sẽ không thấy gì mới trên layout. Ta muốn tấm ván di chuyển theo con trỏ chuột. Tuy nhiên ta chỉ muốn tấm ván di chuyển dọc theo trục x. VÌ vậy, bây giờ chuyển sang event sheet và thêm dòng code sau:


    Điều này sẽ khiến tấm ván chỉ di chuyển theo con trỏ chuột trên trục x. Nếu bạn test thử bây giờ thì bạn sẽ thấy nó di chuyển như bạn muốn, theo 2 hướng. Tuy nhiên, có gì đó sai sai, tấm ván đã đi ra khỏi biên giới. Đây là điều ta ko muốn. Chính vì vậy ta phải dừng nó lại. Đơn giản lắm, bạn chỉ cần nói với tấm ván thế này: “Ko được đi tiếp nữa nếu mày đã đến nơi mà tao chỉ định”. Tất nhiên là nó sẽ không hiểu đâu, nhưng nó sẽ hiểu nếu bạn chuyển sang dạng code như thế này:


    Hãy thử test lại bây giờ, tấm ván đã ko chạy ra khỏi biên giới được nữa. Giờ thì ta chuyển sang phần quả bóng thôi nào.

    3. Làm cho quả bóng bật lên


    Chúng ta sẽ làm 2 điều: quả bóng sẽ tự động di chuyển khi game bắt đầu và bật lên vào những object. Hai điều này có thể thực hiện bằng sử dụng hành vi chuyển động (movement behavior) mà ta đã học được ở chương trước. Ta sẽ thêm hành vi Bullet cho quả bóng để nó luôn di chuyển trong 1 hướng. Tuy nhiên, nếu chỉ sử dụng hành vi Bullet thì sẽ không khiến nó bật nảy được.

    Nếu bạn nhìn vào thuộc tính của hành vi Bullet trên thanh Properties, bạn có thể nhìn thấy một thuộc tính của nó: bounce off solids, nó được mặc định là No. Bằng cách chuyển nó thành Yes, bạn có thể khiến một object với hành vi Bullet bật nảy vào tất cả các vật rắn, nhưng vật rắn chính xác là gì?



    Một vật rắn chỉ là một hành vi khác được thêm vào game object. Một object với hành vi được coi là một solid object, có nghĩa là những game object khác không thể đi qua nó, không thể nhảy qua nó, … Bởi vì ta muốn quả bóng bật vào tấm ván và biên giới, chúng ta sẽ thêm hành vi này cho chúng:



    Sau khi thêm hành vi Solid cho tấm ván và vùng biên giới, chúng ta sẽ phải thay đổi góc của quả bóng một chút để nó di chuyển ở một góc chéo vào đầu level… Vì vậy để nó ở 45o để nó di chuyển vào góc dưới bên phải (hoặc bất cứ góc nào bạn muốn), và sau khi chuyển thuộc tính Bounce off solid thành true, chúng ta đã xong. Vào test thử xem, quả bóng đã bật lại tấm ván và biên giới, giờ ta chỉ thiếu những khối nữa là xong.


    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