1. Forces, impulses, torques và Joint
Khi ta sử dụng hành vi Physics, chúng ta cần phải làm quen với các thuật ngữ cùng với nó, đặc biệt nếu chúng được sử dụng trong C2. Các thuật ngữ như sau:
- Force (lực): Lực là một ảnh hưởng từ bên ngoài thay đổi tốc độ hoặc phương hướng của đối tượng. Lực được áp dụng theo thời gian, vì vậy tốt nhất nên sử dụng các lực trong event có giá trị true trong một thời gian dài, ví dụ như Is key dowm keyboard event.
- Impulses (xung lực): gần giống với lực, nhưng thay vì áp dụng theo thời gian, nó là một sự thay đổi đột ngột. Khi bạn áp dụng một lực vào đối tượng, tốc độ và hướng của nó sẽ thay đổi theo thời gian, nhưng khi bạn tác dụng một xung lực vào đối tượng, bạn sẽ thay đổi phương hướng của nó ngay lập tức. Xung lực được sử dụng tốt nhất trong các sự kiện có giá trị của true thay đổi lập tức, ví dụ như các trigger.
- Torque (momen xoắn): là một lực được tác dụng để xoay; nó sẽ thay đổi tốc độ quay thay vì sự di chuyển của đối tượng.
- Joint (Khớp): khớp nối 2 đối tượng với nhau. Chúng vẫn có thể quay một cách độc lập nhưng vị trí của chúng luôn liên quan đến nhau; nếu bạn di chuyển một đối tượng thì khớp nối cũng sẽ di chuyển. Ví dụ, cái này được sử dụng để tạo một số thiết bị hoặc máy móc the nguyên tắc vật lí.
2. Thêm các phần tử thử thách
Bây giờ ta
đã biết các thuật ngữ sử dụng trong physics, hãy sử dụng chúng bằng
cách thêm tính năng khác: phần tử câu đố. Câu đố khá phổ biến trong
platformer game; chúng thường là những rào cản mà bạn phải vượt qua
để tiến về đích.
Chính
vì vậy, hãy tạo một cái đơn giản ngay bây giờ. Chúng ta có nhân vật
để đẩy tảng đá đập vào cái nút ở dưới mặt đất; nó sẽ mở cánh
cửa. Chúng ta sẽ học cách làm thế nào để tác dụng một lực tới
physic object với trường hợp nhân vật đẩy viên đá. Tiếp tục từ layout
3, thêm một vài sprite object vào nó. Chúng ta sẽ thêm một cánh cửa
để ngăn chặn chúng ta tiến về phía trước; bạn có thể lấy nó từ
tệp Tiles. Sau đó, ta thêm cái
nút. Có hai hoạt cảnh cho nó: Default
và Pressed. Bạn có thể lấy cả 2
từ tệp Items. Thêm hành vi Physics vào chúng, thiết lập Immovable Thành Yes, và đặt chúng như sau:
3. Di chuyển nhân vật với hành vi Physics
Chúng
ta cũng sẽ thêm alien vào Layout 3 để đẩy tảng đá. Giống như bất kì
các object khác trong layout này, chúng ta sẽ thêm hành vi Physics vào alien. Nhưng một điều
quan trọng cần biết khi thêm hành vi Physics
vào nhân vật mà người chơi điều khiển. Khi di chuyển, physics object ko
chỉ trượt trên bề mặt mà còn xoay theo rất nhiều thứ tác dụng vào
chúng (ví dụ như các lực, các xung và va chạm với object khác).
Chúng ta chắc chắn ko muốn nhân vật của chúng ta xoay vòng, vì vậy ta
sẽ ngăn chặn nó bằng cách đặt thuộc tính Prevent rotation thành Yes
ở thành Properties của alienGreen.
Khi
thêm hành vi Physics vào nhân vật
chính, đừng quên đổi thuộc tính Prevent
rotation nếu ko nhân vật chính sẽ xoay vòng.
Một
điều khác cần ghi nhớ: khi di chuyển physics object, chúng ta phải
sử dụng các physics action và các biểu
thức. Điều này đảm bảo C2 sẽ tính toàn vật lí chính xác. Nếu
chúng ta di chuyển một physics object sử dụng hành vi khác, như hành
vì Platform thì có thể chúng ta đã làm điều gì đó ko nên làm, ví
dụ như đi qa một object bất động. Đầu tiên, ta sẽ vô hiệu hóa hành vi
Platform bởi thiết lập thuộc tính của nó thành Disable.
Sau
đó, ta sẽ di chuyển nhân vật bằng tác động của lực và xung lực vào
nó. Để làm điều này, di chuyển tới layout 3 event sheet. Có 3 tính
huống ta muốn di chuyển nhân vật:
- Di chuyển sang phải: Khi ta ấn nút mũi tên phải, chúng ta sẽ tác động một lực ở giá trị dương trên trục x để khiến nó di chuyển sang phải.
- Di chuyển sang trái: Khi chúng ta ấn nút mũi tên trái , chúng ta sẽ tác động một lực tại giá trị âm trên trục x.
- Nhảy: Khi chúng ta nhảy, chúng ta sẽ tác động một lực ở một mức độ nhất định để nó di chuyển lên trên.
Dòng
code như này khi mũi tên phải được ấn:
Tương tự với
mũi tên trái:
Cuối cùng
là khi mũi tên lên trên được ấn:
4. Thay đổi tính chất của tảng đá
Bây giờ bạn
có thể test game và di chuyển xung quanh layout. Bạn có thể thấy đối
tượng duy nhất mà nhân vật có thể tương tác là với tảng đá, bởi vì
nó là object duy nhất ko phải bất động. Tuy nhiên, tảng đá di chuyển
quá dễ dàng, hãy làm nó khó hơn để di chuyển.
- Ma sát: Điều này xác định sự dễ dàng cho những đối tượng để di chuyển đối với những cái khác trong khi chạm vào. Bạn có thể thiết lập giá trị giữa 0 và 1, với 0 là ko có ma sát và 1 là ma sát tối đa.
- Giảm tuyến tính: Đây là tốc độ chậm dần của một đối tượng di chuyển, với giá trị 0 là ko có sự chậm dần và 1 là chậm dần tối đa.
Thiết
lập giá trị ma sát và giảm tuyến tính sẽ làm tảng đá khó đẩy hơ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é.
5. Chọn đối tượng thông qua UID của nó
Bây giờ, mọi
thứ đã được thiết lập và sẵn sàng, chúng ta có thể bắt đầu khiến
các nút phản ứng khi va chạm với tảng đá, và sau đó, ta sẽ phá hủy
ổ khóa màu xanh lam. Các chúng ta phá hủy chúng không chỉ làm cho
chúng biến mất với hành động phá hủy, nhưng chúng ta sẽ sử dụng
xung lực để ném chúng vào một góc và phá hủy chúng khi chúng ở
ngoài layout. Tuy nhiên, trước tiên tôi muốn giải thích UID là gì.
Bây
giờ, ta sẽ sử dụng UID trong event sheet để lựa chọn các khóa riêng.
Những gì ta muốn là khi tảng đá va chạm với cái nút, chúng ta muốn
hoạt ảnh của cái nút chuyển sang Pressed
và sau đó tác động một xung lực lên cái hộp. Chúng ta có thể tác
động những xung lực tương đương lên tất cả cái hộp, khiến chúng di
chuyển theo cùng một hướng, nhưng thay vào đó, chúng ta sẽ khiến
chúng di chuyển theo những hướng khác nhau cho giống hiệu ứng vụ nổ.
Nhớ thiết lập các lockBlue object
có thể di chuyển, hoặc chúng ta sẽ không thể di chuyển chúng xung
quanh.
UID của lockBlue của bạn có thể sẽ khác với tôi, vì vậy hãy kiểm tra trước khi viết mã. Chúng tôi cũng muốn phá hủy những ổ khóa sau khi được mở, để chính xác hơn, chúng ta muốn phá hủy chúng khi chúng ra khỏi layout. May thay, có một hành vi cho cái này. Hành vi này có tên là Destroy Outside Layout và nó sẽ phá hủy các đối tượng nào ra khỏi layout. Thêm nó vào lockBlue object.
Điều này không tốt chút nào, có 2 đường kẻ giao nhau, nó sẽ làm ảnh hưởng đến hành vi Physics và gây ra lỗi trong trò chơi bởi vì hành vi Physics ko thể tính toán chính xác vùng va chạm của vật thể này, để khắc phục điều này, chỉnh sửa đa giác va chạm như sau:
Điều này sẽ giúp ngăn chặn các lỗi trong trò chơi và khiến game của chúng ta mượt mà hơn. Test thử game và đẩy tảng đá vào cái nút; bạn sẽ thấy ổ khóa bị thổi bay. Lưu project lại trước khi bạn đánh mất nó, chúng ta sẽ tiếp tục.
6. Nối 2 đối tượng
Tôi
đã đưa ra ví dụ về cách sử dụng các lực và xung lực để di chuyển
các đối tượng vật lí xung quanh, nhưng tôi chưa đề cập đến các khớp
nối. Các khớp dùng để nối 2 đối tượng lại với nhau để khoảng cách
của chúng là như nhau. Chúng ta sẽ làm một cái cầu sử dụng khớp
nối. Chính vì vậy, hãy tạo một layout giống như dưới đây:
Các sprite cho cây cầu và hàng rào được đặt trong tệp Tiles. Trước khi tiếp tục hãy kiểm tra các đa giác va chạm của cây cầu và chỉnh sửa nó để ko có đường nào giao nhau như cái nút.
Luôn luôn kiểm tra đa giác va chạm của object mà bạn muốn thêm hành vi Physics, đặc biệt là những sprite nhỏ.
Hàng rào và câu là những đối tượng vật lí, nhưng chỉ hàng rào là không thể di chuyển, cây cầu vẫn có thể di chuyển. Chúng ta sẽ buộc cây cầu vào hàng rào bằng cách sử dụng các khớp. Một điều cần nhớ về khớp nối là bạn chỉ có thể làm khớp giữa các loại đối tượng, chứ ko phải là các phiên bản khác của cùng một đối tượng. Đó là tại sao ta có một đối tượng hàng rào và một đối tượng cây cầu, chứ ko phải một đối tượng cây cầu với một đối tượng cây cầu khác.
Sử dụng khớp nối, ta nối chúng dựa trên điểm ảnh của chúng; nếu một đối tượng ko có điểm ảnh, thì nó sẽ dựa trên origin point (điểm gốc), theo mặc định thì nó nằm ở giữa sprite. Bây giờ, chúng ta không muốn nối cây cầu bởi điểm gốc của nó, bởi vì nếu bạn nhìn vào nó, điểm gốc sẽ nổi trên cây cầu, vì vậy, ta sẽ tạo một điểm ảnh ở giữa sprite, gọi là imagepoint 1.
Các sprite cho cây cầu và hàng rào được đặt trong tệp Tiles. Trước khi tiếp tục hãy kiểm tra các đa giác va chạm của cây cầu và chỉnh sửa nó để ko có đường nào giao nhau như cái nút.
Luôn luôn kiểm tra đa giác va chạm của object mà bạn muốn thêm hành vi Physics, đặc biệt là những sprite nhỏ.
Hàng rào và câu là những đối tượng vật lí, nhưng chỉ hàng rào là không thể di chuyển, cây cầu vẫn có thể di chuyển. Chúng ta sẽ buộc cây cầu vào hàng rào bằng cách sử dụng các khớp. Một điều cần nhớ về khớp nối là bạn chỉ có thể làm khớp giữa các loại đối tượng, chứ ko phải là các phiên bản khác của cùng một đối tượng. Đó là tại sao ta có một đối tượng hàng rào và một đối tượng cây cầu, chứ ko phải một đối tượng cây cầu với một đối tượng cây cầu khác.
Sử dụng khớp nối, ta nối chúng dựa trên điểm ảnh của chúng; nếu một đối tượng ko có điểm ảnh, thì nó sẽ dựa trên origin point (điểm gốc), theo mặc định thì nó nằm ở giữa sprite. Bây giờ, chúng ta không muốn nối cây cầu bởi điểm gốc của nó, bởi vì nếu bạn nhìn vào nó, điểm gốc sẽ nổi trên cây cầu, vì vậy, ta sẽ tạo một điểm ảnh ở giữa sprite, gọi là imagepoint 1.
Sau
đó, ta sẽ ngăn chặn cây cầu xoay vòng bằng cách thiết lập thuốc tính
Prevetn rotation thành Yes. Chuyển tới event sheet của
layout 4, ta sẽ nối chúng lại với nhau. Bạn chỉ nên tạo các khớp trên
những trigger, chứ ko phải các sự kiện bình thường có giá trị true trên một thời gian dài. Trong
ví dụ của chúng ta, chúng ta sẽ tạo một khớp nối ở đầu layout. Làm
một khớp nối chỉ cần một hành động, nhưng chúng ta có 2 cây cầu nên ta sẽ sử dụng
một hành động 2 lần.
Đã
xong. Chúng ta đã tạo ra một khớp nối. Sao chép code để khiến nhân vật di chuyển từ layout 3 và
test thử. Bạn có thể di chuyển lên đỉnh đầu của cây cầu nêu bạn
muốn.
7. Các engine vật lí trong Construct 2
7. Các engine vật lí trong Construct 2
C2 có
3 engine vật lí để chạy các tính toán vật lí:
- Box2dweb: Mặc định, C2 sử dụng bản box2dweb của engine vật lí. Box2dweb dựa trên engine vật lí box2d; là một engine vật lí thường đc sử dụng trong các trò chơi. Bản box2dweb là bản JavaScript được dự định sử dụng trong các trò chơi web.
- Box2dweb asm.js: đây là phiên bản nhanh hơn của box2dweb. Nó sử dụng công nghệ emscripten (một công nghệ từ Mozilla) sử dụng C và C++ để tạo ra JavaScript có hiệu năng cao. Đó là cái được gọi là asm.js, và tất cả trình duyệt được tối ưu cho asm.js có thể dịch code này để cho phép hiệu suất nhanh mà bạn nhận được code từ C và C++. Tuy nhiên, tất cả những cái này xảy ra trong trình duyệt của bạn.
- CocoonJS native: Đây là engine vật lí được tối ưu hóa cho gói CocoonJS. Nếu bạn ko biết về nó, thì CocoonJS là dịch vụ giúp bạn gói hoặc bao bọc HTML5 game, giống như những thứ được tạo ra trong C2, tới Android và IOS game. Nếu bạn tạo game mobile và dự định sử dụng CocoonJS để xuất bản chúng thì CocooonJS native chính là lời khuyên dành cho bạn.
Bây giờ có thể có một số bạn tự hỏi rằng nếu asm.js nhanh hơn box2dweb thông thường, thì tại sao ko sử dụng box2dweb asm.js làm engine vật lí mặc định? Có 2 nhược điểm sau của asm.js:
- Nó ko hỗ trợ hành động vô hiệu hóa va chạm. Một số trò chơi cũ được tạo ra trước khi tính năng engine vật lí được thêm vào có thể sử dụng action để vô hiệu hóa những va chạm, và thiết lập asm.js như một engine vật lí mới sẽ phá vỡ những trò chơi này.
- Trong các ứng dụng gốc của IOS, nó sẽ chậm hơn. Lí do là các bit kĩ thuật. Trình duyệt Safari trên IOS có một biên dịch JIT giải thích JavaScript code và chạy nó. Khi bạn chạy một ứng dụng IOS gốc, ví dụ, khi bạn gói game của bạn mà sử dụng CocoonJS hay PhoneGap thì JIT sẽ không hỗ trợ. Chú ý rằng đây vẫn là hiệu suất nhanh cho nhiều trò chơi. Tuy nhiên, nó vẫn chậm hơn phiên bản ko asm.js. Chính vì vậy, nếu bạn muốn làm game cho IOS thì ko nên sử dụng box2dweb asm.js.
Được rồi, giờ bạn đã biết về 3 engine vật lí trong C2. Nên dùng cái nào? Nếu bạn triển khai game mobile, hãy sử dụng CoconJS, nếu bạn nhắm đến nền tảng IOS, sử dụng box2dweb, và nếu sử dụng các action vô hiệu hóa va chạm, hãy sử dụng box2dweb. Nếu bạn gặp bất kì thứ gì khác những cái trên, sử dụng box2dweb asm.js.
Tổng kết
Vật lí là một
chủ đề phức tạp, chúng ta đã nghiên cứu về nó trong chương này. Bạn đã học cách
tạo hoạt ảnh của sprite cùng và không cùng vòng lặp. Bạn cũng học về 3 hành vi
mới: Platform, Scroll to và Bound to Layout.
Hơn thế nữa, bạn đã học về cách tạo layout mới trong C2 và cách thay đổi layout
trong trò chơi. Bạn cũng được biết về 3 engine cung cấp vật lí của C2 và khi
nào chúng nên được sử dụng. Bạn cũng học được rằng chúng ta có thể chọn một cá
thể riêng lẻ bằng UID, thay vì chọn tất cả các phiên bản cùng một lúc. Cuối
cùng, bạn cũng được chỉ về cách sử dụng các khớp trong đối tượng vật lí.
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é
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é