-->

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



    5. Cho phép máy bay rơi và va chạm

    Bây giờ chúng ta đã có 1 chiếc máy bay tại 1 chỗ và mặt đất ở bên dưới, chúng ta có thể thử nghiệm cho nó rơi. Cách đơn giản để làm điều này là sử dụng các hành vi (behavier).

    Các hành vi là các plugin được sử dụng bởi những game object để khiến chúng xử lí theo 1 cách nhất định.

    Không phải tất cả các object đều sử dụng hành vi. Ví dụ, một array object (là một mảng) không thể sử dụng các hành vi nhưng các đối tượng thông thường như các sprite thì có thể. Những hành vi được sử dụng để thêm các thuộc tính cho object, làm cho nó biến mất hoặc kéo hoặc chuyển động. Để thêm hành vi cho object, kích chuột vào object đó rồi kích vào phần Behaviors ở thanh  Properties để thêm hoặc chỉnh sửa các hành vi.


    Nhấp vào Behaviors sẽ mở ra hộp thoại hành vi nơi bạn có thể thấy hành vi của đối tượng cũng như thêm hành vi cho đối tượng. Nhấp vào dấu cộng để thêm hành vi mới, nhấp vào bút chì để đổi tên hành vi đã chọn và nhấp vào biểu tượng thùng rác để xóa hành vi.


    Nhấn vào dấu cộng để mở cửa sổ khác; đây là danh sách tất cả hành vi mà bạn có thể chọn thêm. Có rất nhiều hành vi cho bạn lựa chọn, điều này có thể làm bạn bối rối, nhưng bây giờ bạn chỉ cần cuộn xuống và tìm hành vi 8 Direction, chọn nó và ấn nút Add để thêm nó.

    Hành vi 8 Direction là hành vi chuyển động cơ bản, nó cho phép đối tượng di chuyển 8 hướng và xoay quanh 1 cách trơn tru. Trước khi chuyển sang event sheet và viết code đầu tiên, chúng ta nên vô hiệu hóa thuộc tính điều khiển mặc định của hành vi này.Hành vi này khiến cho object di chuyển bằng cách sử dụng mũi tên.

    Vì chúng ta không muốn máy bay của ta di chuyển bằng nút mũi tên nên ta phải vô hiệu hóa nó. Chọn máy bay màu xanh và thay đổi thuộc tính của nó Default control thành No.


    Bây giờ chúng ta sẽ làm cho máy bay tự động rơi xuống và va chạm với mặt đất. Chúng ta sẽ tới phần event sheet và thêm mã. Kích vào Add event và lựa chọn System object. Nhấn đúp chuột vào event Every tick. Sau khi bạn tạo event, chúng ta sẽ thêm action bằng cách kích vào link Add action. Lựa chọn bluePlane và nháy đúp vào 8 direction Simulate control. Một hộp thoại sẽ xuất hiện nơi bạn sẽ chọn hướng để mô phỏng. Chọn Down và kích vào Done, bạn sẽ thấy 1 event như sau:


    Điều này sẽ làm máy bay đi xuống với mỗi lần tick (đánh dấu). Nếu chúng ta test thử nó bây giờ, máy bay vẫn sẽ tiếp tục đi xuống cho đến khi ra khỏi màn hình trò chơi. Đây không phải là điều chúng ta muốn, và chúng ta cần thêm một số code để dừng nó lại; để dừng sự chuyển động này, ta cần vô hiệu hóa một số hành vi như sau:


    Event này sẽ vô hiệu hóa hành vi 8 direction khi nó va chạm với mặt đất. Để test layout, hãy nhấn F5 hoặc biểu tượng Run layout ở góc trái bên trên màn hình.

    6. Thiết lập khi gõ vào màn hình máy bay sẽ bật lên

    Bây giờ, máy bay đã rơi xuống và va chạm với mặt đất như chúng ta muốn. Bây giờ, ta muốn nó nhảy lên khi nhấn vào màn hình. Dịch nó sang mã, nhảy lên tức là di chuyển lên trên trong 1 thời gian ngắn trước khi nó tự động hạ xuống. Để làm điều này, ta cần thêm 1 hành vi nữa: hẹn giờ (timer).

    Hẹn giờ dùng để đếm số giây đã trôi qua kể từ khi nó bắt đầu những object với behavior này sẽ hành động sau khi ngần ấy giây trôi qua. Hành động này có thể thực hiện 1 lần hoặc nhiều lần. Để thêm hẹn giờ, hãy thực hiện những bước như khi bạn thêm hành vi 8 direction.


    Bây giờ, chúng ta có thể bắt đầu làm cho máy bay nhảy lên nhưng trước đó ta cần thêm 1 số thứ để event làm cho máy bay đi lên. Trước đó, chúng ta đã làm máy bay đi xuống vào mỗi lần tick, nhưng chúng ta làm máy bay đi lên như thế nào? Đó chính là instance variable (biến thực thể).

    7. Sử dụng biến thực thể

    Các biến thực thể giống như các biến khác, nhưng chúng liên kết với mỗi phiên bản của object. Nếu bạn thêm 1 biến thực thể vào một object thì biến thực thể này sẽ được sao chép qua các phiên bản khác của object nhưng thay đổi giá trị của 1 biến thực thể sẽ không làm thay đổi giá trị của các biến thực thể khác ở cùng một object. Ví dụ: nếu bạn tạo 1 trò chơi bắn súng, bạn có thể thêm một biến thực thể là Health cho tất cả tàu địch nhưng giá trị Health ở mỗi tàu địch sẽ thay đổi khác nhau tùy vào phát bắn của người chơi.


    Để tạo một biến thực thể mới, đầu tiên bạn phải chọn một đối tượng mà bạn muốn thêm biến thực thể, trong trường hợp này là bluePlane. Sau đó chọn mục Instance variables màu xanh nước biển trên thanh Properties; nó sẽ mở ra hộp thoại tương đương với hộp thoại hành vi với các nút thêm / chỉnh sửa biến thực thể. Nhấp chuột vào dấu cộng sẽ mở ra một hộp thoại biến thực thể mới nơi bạn có thể thêm biến thực thể mới. Nhập flapping vào mục Name, chọn Boolean ở mục Type, và giữ giá trị ban đầu (intial value) ở false. Hộp thoại trông như sau:


    Bạn có thể thêm miêu tả nếu muốn, sau đó nhấn OK để thêm biến thực thể này vào object đã lựa chọn. Tiếp theo, đóng cửa sổ hộp thoại biến thực thể và thêm 1 object mới, đó là Touch object. Đây là object có thể dùng cho toàn bộ project. Nếu bạn thêm object này thành công, bạn sẽ nhìn thấy thông báo ở đầu C2 nói rằng this object will be available to the entire project.




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


    8. Sử dụng hành vi Timer

    Bây giờ, đi tới event sheet và thêm một vài dòng code mới; những dòng code này sẽ cài đặt biến flapping thành true khi người chơi tap và bắt đầu hẹn giờ máy bay sẽ bật lên trong bao lâu. Trước tiên, thêm 1 event mới, chọn biểu tượng Touch, chọn nút On any touch start để nhận thấy cái chạm của người chơi. Sau đó thêm một action mới cho event này. Chọn bluePlane và cuộn xuống cho đến khi bạn thấy action Start timer; nháy đúp chuột vào đó.

    Bạn sẽ thấy một hộp thoại với 3 thuộc tính: Duration, Type, TagDuration để cài đặt bao nhiêu giây để thực hiện trước khi bộ hẹn giờ bắt đầu. Tag xác định thẻ cho action này để chúng ta có thể xem lại nó sau, trong khi đó Type cài đặt bộ hẹn giờ lặp đi lặp lại hay chỉ 1 lần. Trong khi kiểu regular có nghĩa là bộ hẹn giờ sẽ được lặp lại cho mỗi duration. Lựa chọn Once: 


    Tôi đã sử dụng từ And để chỉ ra rằng có nhiều action trong 1 event. Một điều cần chú ý là chúng ta không chỉ muốn action trước chạy khi người chơi tap mà còn muốn nó chạy khi biến thực thể flapping được đặt là false. Chính vì vậy, chúng ta cần thêm một điều kiện mới cho event này. Để làm điều này hãy chọn event và ấn nút C trên bàn phím hoặc ấn chuột phải và chọn Add condition. Nó sẽ mở ra một cửa sổ hộp thoại gần giống với khi bạn thêm một event mới.


    Sau đó, chon bluePlane và tìm Is boolean instance variable set, event sẽ trông như thế này:


    Về sau, chúng ta cũng sẽ sử dụng And nếu có nhiều hơn 1 điều kiện trong 1 event.

    Điều này gần như không chính xác với những gì ta muốn, bởi vì chúng ta muốn kiểm tra xem nếu biến flapping được đặt là false; ở hình trên event lại là nếu biến thực thể là true. Để làm những gì chúng ta muốn, chúng ta cần phải đảo ngược điều kiện. Đảo ngược có nghĩa là khiến cho các điều kiện ở 1 event thành giá trị đối lập với những gì được viết.

    Để đảo ngược điều kiện, chúng ta cần kích chuột phải vào nó và chọn Invert:


    Start Timer “ flap” nghĩa là chúng tôi đã phân phát 1 ID của flap để bộ hẹn giờ hoạt động. Chúng ta có thể sử dụng ID này để xem một bộ hẹn giờ sau. Tất cả bộ hẹn giờ sẽ bắt đầu sau khi sau khi khởi động số giây đã trôi qua. Trong trường hợp này chúng ta đặt nó là 0.5 giây. Phần Once trong mã có nghĩa là bộ hẹn giờ này chỉ bắt đầu 1 lần chứ không lặp lại.

    Trước khi chuyển sang phần tiếp theo, chúng ta cần thay đổi một thứ: event đầu tiên nơi máy bay rơi xuống. Ban đầu, chúng ta muốn nó rơi xuống vào mỗi lần tick, bây giờ chúng ta chỉ muốn nó đi xuống khi nó không flap để ta có thể khiến nó đi lên. Nếu máy bay đi xuống vào mỗi lần tick, nó sẽ không thể đi lên. Vì vậy, thay đổi dòng code như sau:


    Bây giờ, chúng ta sẽ làm 2 việc: xác định điều gì sẽ xảy ra khi biến thực thể flapping là true và điều gì sẽ xảy ra khi bộ hẹn giờ flap bắt đầu. Chúng ta đã tạo ra biến thực thể như 1 event được sử dụng khi máy bay đi lên. Để máy bay đi lên chúng ta chỉ cần làm lại theo hướng khác:


    Bây giờ máy bay sẽ đi lên khi người ta tap vào nó, bởi vì trước đó chúng ta đã thiết lập biến thực thể flapping thành true sao mọi lần chạm. Tiếp theo, chúng ta sẽ viết code cái gì xảy ra sau khi flap timer bắt đầu. Những gì chúng ta muốn là máy bay ngừng flap và rơi xuống. Để làm điều này chúng ta chỉ cần thiết lập biến flapping thành false:


    Điều này sẽ làm máy bay rơi xuống sau nửa giây sau khi đi lên. Nếu bạn kiểm tra nó bây giờ, bạn sẽ thấy máy bay rơi xuống nếu không gõ và bạn sẽ thấy nó đi lên nếu bạn gõ vào màn hình (trong bản test, gõ được coi là kích chuột).




    9. Ngừng quay

    Bây giờ, hành động flap trông khá ổn, nhưng nó vẫn không giống với những gì ta muốn. Máy bay nhìn xuống khi rơi và nhìn lên khi bay, chúng ta cần nó nhìn sang bên phải mọi lúc. Để làm điều này chúng ta cần vô hiệu hóa sự xoay chuyển. Để vô hiệu hóa sự xoay chuyển của hành vi 8 direction, ta sẽ thiết lập Set angle thành No ở thanh Properties:


    Nếu bạn thử nó lần nữa, máy bay sẽ nhìn vào bên phải mọi lúc, giờ thì nhìn nó ổn hơn rất nhiều. Sau đây chúng ta sẽ tạo ra những tảng đá như những chướng ngại vật, nhưng trước đó, tôi muốn nói về vấn đề này: hệ ngẫu nhiê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