-->

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



    Bài 7. Thay đổi trạng thái của một đối tượng game


    Khác với việc thêm thưởng vào game, chúng ta có thể thêm hiệu ứng đặc biệt vào object của trò chơi. Ví dụ, ta sẽ thay đổi trạng thái của tấm ván. Trong khi thay đổi trạng thái của tấm ván, chúng ta sẽ xác định thời gian của trạng thái mới, và sau khi thời gian kết thúc, tấm ván sẽ trở lại vị trí ban đầu. Bây giờ, ta sẽ làm cho tấm ván rộng hơn.

    Để làm điều này, chúng ta cần tạo một biến thực thể dạng Text được gọi là state trên paddleBlue. Giá trị của biến thực thể này sẽ xác định trạng thái của object paddleBlue. Bây giờ, chúng ta cần một địa điểm để thay đổi nó, hãy thay đổi nó khi khối màu tím bị hủy, bởi vì hiện tại không có gì xảy ra khi chúng ta hủy nó.

    Để lựa chọn khối màu tím, ta sẽ nhìn vào biến thực thể blockColoer của nó; nếu nó ghi là purple, ta sẽ chọn khối mà ta muốn. Sau đó ta có thể thay đổi trạng thái của khối này. Điều nữa là tôi muốn đổi trạng thái paddleBlue thành giá trị mặc định của nó. Ta có thể làm điều này bởi kiểm tra của hiệu ứng và biến thực thể blockColor để tìm khối không phải màu tím và không có hiệu ứng. Vì vậy, chúng ta sẽ thêm sự kiện phụ vào code như dưới đây:





    Chúng ta đã thay đổi trạng thái của object paddleBlue, bây giờ, để nó hoạt động thực sự, ta cần thêm 2 sự kiện nữa. Một là khi giá trị biến thực thể của trạng thái rộng hơn và hai là khi nó trở thành một chuỗi rỗng. Chúng ta muốn tấm ván rộng hơn khi trạng thái thay đổi và trở lại chiều rộng ban đầu khi nó là một chuỗi rỗng. Chú ý rằng chiều rộng ban đầu của paddleBlue là 104 pixels và ta muốn nó thành 184 khi rộng hơn. Sự kiện đầu tiên như sau:



    Sự kiện thứ hai:


    Nếu bạn thử game bây giờ, bạn sẽ thấy tấm ván rộng hơn khi khối màu tím bị phá hủy và trở về bình thường khi khối màu xanh bị phá hủy, nhưng tấm ván vẫn rộng khi khối bị phá hủy không phải là màu xanh.

    Thêm nhiều trạng thái



    Bạn đã biết cách thay đổi trạng thái của một đối tượng và đưa nó trở lại trạng thái ban đầu. Tuy nhiên, điều gì sẽ xảy ra khi bạn thêm những khối thay đổi trạng thái? Tôi sẽ trả lời bằng thêm trạng thái khác cho tấm ván. Đầu tiên, hãy thêm một hoạt ảnh gọi là Grey tới object của các khối; đưa hoạt ảnh này một sprite hình chữ nhật màu xám.

    Như đã làm trước đó, cho một số khối, thay đổi giá trị biến thực thể blockColor thành Grey. Chúng ta muốn thay đổi góc của tấm ván sau khi người chơi phá hủy khối này, đầu tiên, chúng ta thêm sự kiện phụ khác khi khối bị phá hủy:


    Như trước đó, để làm trạng thái có hiệu ứng, chúng ta sẽ làm một sự kiện khác để kiểm tra trạng thái của paddleBlue. Sự kiện mới này sẽ thiết lập góc của tấm ván nếu giá trị của trạng thái là góc:





    Đừng quên thay đổi góc trở lại 0o khi trạng thái trở lại là rỗng:



    Test thử game của bạn bây giờ, nếu bạn phá hủy khối màu tím và sau đó là khối màu xám, bạn sẽ thấy tấm ván rộng hơn và nghiêng một góc 45 độ. Đây là do hiệu ứng của các khối thay đổi trạng thái được chấp nhận.

    Như bạn có thể nhớ, chúng ta chỉ thay đổi chiều rộng và góc của tấm ván về giá trị cũ khi biến thực thể của trạng thái là một chuỗi rỗng. Lần này, biến thực thể trạng thái không có sự thay đổi để trở thành rỗng trước khi trạng thái thay đổi, do đó áp dụng 2 thay đổi trạng thái cùng 1 lúc.


    Khi bạn làm game của bạn, hãy luôn cố gắng tìm ra những khía cạnh nhỏ như này, ko phải C2 lúc nào cũng cho bạn biết bạn muốn gì, đây là điều bình thường khi bạn làm game, ko vấn đề gì với công cụ bạn sử dụng. nó thường xảy ra khi bạn thay đổi giá trị của biến.



    Để sửa điều này, ta cần phải tắt các hiệu ứng thay đổi khác khi ta chuyển sang trạng thái mới. Ta sẽ thiết lập góc thành 0 khi chúng ta làm tấm ván rộng ra và đưa chiều rộng trở lại khi chúng ta nghiêng góc. Chính vì vậy ta có 2 hành động mới cho 2 sự kiện khác nhau:



    Bài 8. Kết thúc trò chơi

    Ta đã hoàn thành rất nhiều thứ trong chương này, và tôi đã giải thích rất nhiều thứ, tôi sợ chương này có nhiều thứ khó hiểu. Nhưng đừng từ bỏ và đừng dừng lại. Bây giờ ta sẽ thêm những đặc tính của sự thay đổi trạng thái, nó là lúc áp dụng thời điểm thua trong game. CÓ hai điều kiện thua trong game này: khi người chơi hết mạng và khi hết thời gian. Để làm điều này, chúng ta sẽ đưa các giá trị mặc định cho các biến toàn cầu liên quan đến điều kiện thua. Chúng ta có 3 mạng và thờigian là 60 giây vào đầu level:


    Sau đó, chúng ta sẽ diễn tả những giá trị này trên màn hình như ta đã làm ở game thứ nhất. Vì vậy, ta sẽ tạo hai object Text mới và đặt ở HUD layer, đặt tên chúng là txtTimetxtLife, và khiến giá trị của chúng hiển thị ở biến thực thể gameTimelife như sau:



    Để hiển thị người chơi đã thua, ta sẽ hiển thị văn bản Game OVER khi điều kiện thua xảy ra. Chính vì vậy, tạo một Text object khác, thêm nó vào HUD layer, ghi GAME OVER vào nó, và thay đổi font của nó cho lớn hơn.

    Để thay đổi size của Text, bạn phải thay đổi thuộc tính Font trên text object. Khi bạn kích vào thuộc tính Font, bạn sẽ thấy một hộp nhỏ có 3 dấu chấm trên nó; kích vào phần này để mở cửa sổ nơi bạn có thể thay đổi font:


    Trong cử sổ này, bạn có thể thay đổi font chữ, phong cách chữ và kích thước chữ. Thiết lập kích thước lên 36 và đặt ở giữa màn hình. Ta cũng sẽ thay đổi màu của phông chữ; để làm điều này, kích vào thuộc tính Color của phông chữ, bạn sẽ thấy một hộp nhỏ ở phía tay phải. kích vào nó, một hộp với nhiều màu sắc hiện ra để lựa chọn. Bây giờ, cho chữ GAME OVER thành màu đỏ. Di chuyển phông chữ txtGameOver ra khỏi màn hình, bởi vì ta chỉ cần nó khi người chơi thua.



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


    1. Thua vì hết giờ

    Điều kiện thua đầu tiên mà ta muốn làm đó là thua vì hết giờ. Logic rất đơn giản: nếu biến toàn cầu gameTime dưới 1, nghĩa là giá trị 0 hoặc âm, thì ta sẽ hiện phông chữ GAME OVER ở giữa màn hình trò chơi. Ta phải dừng chuyển động của quả bóng, bởi vì ta không muốn nó di chuyển và đập lung tung khi đã tuyên bố người chơi thua. Nếu ta viết dòng code này, nó sẽ như sau:


    Bây giờ chỉ thiếu một điều là ta vẫn chưa giảm thời gian của game; thật tuyệt khi C2 có một sự kiện có thể làm vài thứ mỗi giây (hoặc vài giây tùy thuộc vào những gì bạn muốn).


    2. Thua vì hết mạng

    Bây giờ, ta sẽ làm cho người chơi thua vì hết mạng. Ban đầu, người chơi sẽ có 3 mạng, mỗi lần quả bóng rới xuống dưới màn hình, người chơi sẽ mất đi 1 mạng, và nếu mạng tiến tới 0, chúng ta có thể nói rằng người chơi đã thua. Câu hỏi là làm thế nào để tiếp tục sau khi quả bóng rơi xuống màn hình. Câu trả lời là a sẽ tạo ra quả bóng mới:

    Vì vây, logic rất đơn giản; nếu quả bóng rơi xuống màn hình, ta sẽ giảm mạng của người chơi đi 1; nếu nó trên giá trị 0, ta sẽ tạo quả bóng mới cho người chơi, và nếu nó đạt giá trị 0, người chơi thua. Code như sau:

    Nếu bạn test thử game bây giờ, bạn sẽ thấy nó hoạt động rất tốt. Tuy nhiên, ta vẫn còn thiếu 1 thứ: đó là điểm số. Chính vì vậy hãy tạo nó nào.

    3. Tính điểm

    Tính điểm cực kì dễ vì ta có biến thực thể trong object của các khối, ta có thể sử dụng nó để tăng điểm số khi nó bị phá hủy. Vì vậy, về cơ bản ta chỉ cần thêm giá trị điểm mỗi lần khối bị phá hủy.

    Ở đây, ta sẽ tạo khối mới, một sự kiện On destroyed, bên cạnh khối mà ta vừa tạo. Không sao cả khi làm những sự kiện khác nhau, nó có thể làm giảm số lượng action trong 1 sự kiện để code có thể dễ đọc và hiểu hơn.

    Bạn có thể tạo hai hoặc nhiều sự kiện từ cùng một sự kiện. Sử dụng điều này với các nhóm hoạt động và sự kiện phụ để code dễ học và hiểu hơn.

    Sau khi chúng ta tạo code, là lúc hiển thị điểm số. Ta sẽ hiển thị nó vào lúc level kết thúc, kể cả khi người chơi thắng hay thua. Ta sẽ tạo Text object mới được gọi là txtScore trên HUD layer và bỏ nó ra khỏi màn hình. Đầu tiên, hiển thị object này khi người chơi thua. Tạo một txtScore object mới khi gameTime dưới 1 hoặc khi mạng sống của người chơi = 0. Ta sẽ thêm hành động vào 2 sự kiện:


    Sau khi tạo phông chữ điểm số, chúng ta sẽ hiển thị giá trị ban đầu của nó. Giá trị ban đầu ko phải giá trị mà ta thiết lập ở thanh Properties của nó, nhưng sẽ dựa trên biến toàn cầu điểm số. Do đó ta sẽ tạo giá trị ban đầu của nó  ở một địa điểm khác khi nó được tạo. C2 có một sự kiện là On created được tạo khi object đầu tiên được tạo, ta sẽ thiết lập giá trị ban đầu ở đó:


    Test thử game bây giờ, bạn sẽ thấy một hộp phông chữ GAME OVER xuất hiện khi mạng của người chơi bằng 0. Tiếp theo, ta sẽ hiển thị điểm số cho người chơi thắng.

    4. So sánh một biểu thức

    Người chơi thắng game này khi tất cả các khối bị phá hủy. Để biết khi nào khối bị phá hủy hoặc không, chúng ta sẽ đếm số phiên bản của khối. Nếu nó là 0, chúng ta sẽ biết tất cả các khối đã bị phá hủy. C2 có một biểu thức để đếm số lượng phiên bản của 1 object; để đối chiếu 1 biểu thức thay cho 1 biến, ta sẽ sử dụng sự kiện compare two values của hệ thống, và tạo ra một điều kiện “System blocks.count = 0” .

    Ngoài ra, ta cũng muốn tính các khối khi trò chơi đang diễn ra, không phải sau khi trò chơi đã kết thúc. Vì vậy, ta sẽ thêm một một điều kiện khác đóng vai trò như một người đánh dấu khi game kết thúc. Chúng tôi muốn ngăn chặn chuyển động của quả bóng sau khi người chơi thắng, hãy sử dụng như một điểm đánh dấu và thiết lập tốc độ của quả bóng thành 0. Ta sẽ dừng chuyển động của quả bóng khi người chơi thắng, với những hành động và điều kiện kết hợp với nhau, code của ta sẽ như sau:


    Chơi trò chơi cho đến khi bạn thắng, và bạn có thể thấy điểm số được hiển thị như ta muốn. Quả bóng đã ngừng chuyển động, vì vậy không cần phải lo lắng về việc nó rơi xuống dưới màn hình game khi ta thắng.

    5. Kiểm soát lỗi

    Vâng, chúng ta đã có được một trò chơi nhỏ vô cùng hoàn hảo. Tuy nhiên, giống như bao trò chơi khác, trò chơi này cũng có thể có lỗi. Hiện tại có hai lỗi ở đây: bộ đếm thời gian không dừng lại khi game kết thúc và thời gian có thể đếm xuống âm. Ta có thể sửa lỗi đầu tiên bằng cách chắc chắn rằng ta đã chỉ trừ đi biến gameTime trong khi trò chơi vẫn tiếp tục, nói cách khác là khi mạng sống và số lượng các khối trên 0.

    Lỗi thứ hai có thể sửa một cách đơn giản bởi thay đổi giá trị phông chữ khi gameTime nhỏ hơn 1. Kết quả dòng code như sau:


    Tổng kết

    Trong chương này, bạn đã được học về đối tượng mới, Tiled background và cách sử dụng nó. Bạn cũng được học về hành vi mới, Solid và cách sử dụng nó để bật khỏi các đối tượng khác. Bạn cũng được học về biểu thức, cách sử dụng chúng và cách so sánh chúng với các biến thực thể khác. Bạn cũng học về các biến không đổi (constant variable) và cách thay đổi trạng thái của một đối tượng. Hơn nữa, bạn cũng được tiếp xúc với sự kiện phụ (sub-event).

    Trong chương tới, tôi sẽ giới thiệu cho bạn đối tượng vật lí (Physics object) và một vài thứ bạn có thể làm với nó.


    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