Chương 5. Làm platformer game
Chào mừng đến với chương này. Chúng
ta đã đề cập rất nhiều từ chương trước: object mới, hành vi mới, sự kiện phụ,
và biểu thức. Những điều mới này là một trong những tính năng phổ biến nhất mà
bạn sử dụng trong dự án của mình cho dù bạn muốn làm game như thế nào. Những Solid object được sử dụng khi bạn muốn
gây trở ngại trong game và những sự kiện phụ cùng biểu thức được sử dụng khi bạn
làm game với cơ chế phức tạp.
Tôi sẽ dạy bạn cách sử dụng những kiến
thức từ trước tới giờ ở cấp độ mới, làm thế nào để tạo ra một trò chơi phức tạp
hơn, một thể loại mà cực kì phổ biến bây giờ, đó chính là platformer. Chúng ta
sẽ sử dụng solid object để thiết kế các level; và chúng ta sẽ tạo ra một phong
cách Mario và những yếu tố câu đố. Tôi sẽ dạy bạn cách sử dụng vật lí học (phát
hiện và đáp ứng các va chạm) trong C2.
- Cách chuẩn bị một cấp độ.
- Cách sử dụng vật lí học.
- Cách kết hợp hai đối tượng.
Bài 1. Chuẩn bị cấp độ
Bắt
đầu ở chương này, tôi sẽ bỏ qua phần thiết kế game và chuyển xuống phần các bit
kĩ thuật. Bằng cách này tôi có thể giải thích cho các bạn kĩ hơn về mỗi chủ đề.
Bây giờ, hãy tạo một dự án trống trên C2 và một cấp độ giống như trong hình dưới
đây:
Cấp
độ ví dụ này có tất cả những yêu cầu cơ bản của một cấp độ platformer. Nó có mặt
đất để đi, mặt phẳng để bước và những cái hộp lơ lửng chứa tiền xu. Đây là cơ hội
tốt để làm quen với một game cơ học sớm, vì vậy không gian trò chơi có thể test
một hoặc tất cả hệ thống của mình một cách nhanh chóng. Tất cả sprite chúng ta
sử dụng ở trong tệp platformer pack,
có thể tải trên trang chủ. Platformer pack chứa rất nhiều sprite dành cho game platformer,
là ý tưởng tốt để bạn sử dụng sau này.
1. Thiết lập nhân vật
Thiết
lập nhân vật chính đòi hỏi chúng ta phải có một ít hoạt ảnh với sprite của nó.
Những hoạt ảnh được yêu cầu:
- Đứng
- Đi
- Nhảy
- Bị thương
Đó
là những hoạt ảnh cơ bản; chúng ta có thể thêm nhiều hơn nếu cần thiết, có thể
là leo trèo hoặc bơi. Các sprite nhân vật mà ta sẽ sử dụng có sẵn trong platformer pack / Extra animations và enemies / Alien; ở đây có một vài alien
sẵn sàng được sử dụng, cùng với hoạt ảnh của nó. Chúng ta sẽ sử dụng alien màu
xanh lá cây trong chương này, tất nhiên bạn có thể chọn bất cứ màu nào mà bạn
muốn.
Thêm một
sprite game object mới và đặt tên nó là alien.
Ta sẽ có một số hoạt ảnh như sau:
Đối
với hoạt ảnh Default, chúng ta sẽ sử
dụng stand sprite (alienGreen_stand.png).
Với hoạt ảnh Walking, chúng ta sẽ sử
dụng 2 walking sprite của alien sprite (alienGreen_walk1.png
và alienGreen_walk2.png). Nếu bạn muốn
nhiều khung hình hơn cho hoạt ảnh, bạn cần sử dụng cửa sổ Animation frames. Ở khung hình đầu tiên, thêm sprite walk1 như bình thường, nhưng với những
khung hình sau này, chúng ta sẽ kích chuột phải vào cửa sổ Animation frames và kích vào nút Add frames.
Sau khi chúng ta thêm khung hình, ta
cần tải lại hình ảnh từ 1 tệp. Bây giờ, hoạt ảnh này đã sẵn sàng có nhiều hơn 1
khung hình, hoạt ảnh sẽ tự động bắt đầu khi chúng ta chuyển sang hoạt ảnh Walking. Vấn đề là chúng ta muốn hoạt ảnh
Walking lặp, ko chỉ dừng lại cho đến
khi chạy tới khung hình cuối cùng ( giống
như tất cả các hoạt ảnh mặc định ). Vậy ta làm thế nào?
Câu trả lời là thay đổi thuộc tính của nó. Kích
vào tên của một hoạt ảnh mà thuộc tính của nó bạn muốn thay đổi ở cửa sổ Animation, sau đó nhìn vào thành Properties. Bạn có thể thấy thanh
Properties bây giờ hiện lên các thuộc tính của hoạt ảnh mà bạn đã chọn. Chuyển
thuộc tính của Loop thành Yes. Và sau đó, hoạt ảnh này sẽ tự động
lặp khi chạy tới khung hình cuối cùng:
Chúng
ta đã hoàn thành việc thêm khung hình vào hoạt ảnh Walking. Chuyển sang hoạt ảnh Jumping
và chọn hình ảnh nhảy (alienGreen_jump).
Đóng cửa sổ chỉnh sửa hình ảnh, và bây giờ ta đã có nhân vật của chúng ta trên
màn hình.
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é.
2. Di chuyển nhân vật
Bây
giờ ta đã có nhân vật trên màn hình, nhưng ngay bây giờ nhân vật của chúng ta vẫn
không thể di chuyển; chúng ta sẽ khiến nó di chuyển như thể nó nhận thức được rằng
nó là một nhân vật trong platformer game. May mắn là điều này rất đơn giản
trong C2: sử dụng hành vi Platform.
Hành vi này nằm ở phần movement khi bạn
thêm hành vi. Thêm hành vi này tới alien object, và nó có thể di chuyển như là
Mario. Tuy nhiên, trước khi có thể làm được điều này, ta cần phải xác định mặt
đất cho nó. Một object với hành vi Platform
không thể đi qa bất kì solid object
nào; chúng ta sẽ thêm hành vi Solid
cho grassMid object. Test thử game
bây giờ, bạn có thể điều khiến alien bằng các nút mũi tên.
3. Thay đổi hoạt ảnh
Tôi chắc chắn rằng bạn đã nhận ra khi
bạn di chuyển alien object, nó ko hề sinh động, nó vẫn hiển thị hoạt ảnh của nó.
Vâng, chính là do ta không bảo nó thay đổi hoạt ảnh. Hãy làm điều đó ngay bây giờ.
Để làm điều này, ta cần phải xem các
mũi tên có được nhấn hay ko. C2 làm điều này thông qa game object Keyboard, chính vì vậy, hãy thêm game
object này tới project của bạn. Sau đó chuyển đến event sheet.
Chúng ta muốn thay đổi hoạt ảnh Walking khi chúng ta nhấn nút mũi tên
trái hoặc phải và thay đổi hoạt ảnh Jumping
khi chúng ta nhảy lên và trở về hoạt ảnh mặc định khi ta không nhấn bất kì nút
nào. Sự kết hợp của Keyboard object và
hành vi Behavior đã khiến logic này
được bảo đảm. Chúng ta sẽ thay đổi hoạt ảnh của walking khi ấn nút mũi tên trái hoặc phải. Dòng code khi di chuyển
sang phải như sau:
Dòng code di chuyển sang trái như
sau:
Sau
đó ta sẽ thay đổi hoạt ảnh của Jumping
khi alien đang ở trên không. May mắn, hành vi Platform của C2 cho chúng ta một cách dễ dàng để nhìn trạng thái
khác nhau của nhân vật, từ nhảy lên đến khi rơi xuống đất. Chúng ta sẽ thay đổi
hoạt ảnh của nhân vật khi nhảy như sau:
Những gì còn lại là thay đổi hoạt ảnh trở về hoạt ảnh đứng im mặc định. Có 2 nơi ta phải làm điều này: khi ta ngừng ấn nút mũi tên trái phải và khi nhân vật hạ xuống đất.
Keyboard object có một sự kiện On released để kiểm tra khi nào người chơi ấn nút, và Platform object có sự kiện On landed để kiểm tra khi nào người chơi
hạ cánh sau khi nhảy hoặc ko. Tuy nhiên chúng ta chỉ thay đổi về hoạt ảnh mặc định
nếu hoạt ảnh đang chạy là Jumping.
Điều này nghĩa là ta vẫn có thể di chuyển nhân vật nếu nó đang ở trên không và
ta muốn hắn tiếp tục đi sang trái hoặc phải khi hạ xuống đất. Chính vì vậy,
code như sau:
Bạn có thể đã quan sát từ or trong dòng code và đang thắc mắc nó là cái gì. Giống như các ngôn ngữ lập trình khác, C2 cũng có từ khóa AND và OR, có chức năng như sau:
- AND: có nghĩa là các điều kiện trong một sự kiện phải đúng để các sự kiện phụ khởi chạy.
- OR: từ khóa này tức là chỉ cần 1 trong các điều đúng.
Để tạo từ khóa or, kích chuột phải vào sự kiện và lựa chọn Make ‘Or’ block; từ khóa or sẽ được cấp cho khối đó.
Lưu ý rằng một sự kiện không thể có cả AND và OR cùng 1 lúc; phải luôn luôn là 1 trong 2. Nếu bạn muốn thấy 2 điều
kiện cùng 1 lúc và sau đó sử dụng khối or,
hãy sử dụng sự kiện phụ.
Thử game bây giờ, và bạn có thể thấy
nhân vật di chuyển bằng hướng mũi tên. Tuy nhiên, có một vấn đề, nếu bạn di
chuyển sang bên trái, nhân vật vẫn không quay người lại, đó là do ta không lật ngược
hình ảnh lại.
Có hai cách lật hình ảnh trong C2: lật theo chiều
ngang và lật theo chiều dọc. Lật ngang thì được gọi là phản chiếu (mirror) còn
lật dọc là lộn ngược (flip). Ở đây, chúng ta muốn phản chiếu sprite khi ta ấn
nút mũi tên trái và không phản chiếu khi ta ấn nút mũi tên phải. Thay đổi code như
này khi ta thiết lập hoạt ảnh cho Walking:
4. Làm cho camera theo dõi nhân vật chính
Bây giờ, alien có thể di chuyển bình
thường. Tuy nhiên nếu bạn di chuyển sang phải 1 lúc, nhân vật sẽ đi ra khỏi màn
hình. Điều này là do camera vẫn giữ nguyên khung hình khi bạn di chuyển sang phải.
Để sửa lỗi này, chúng ta sẽ khiến cho camera di chuyển theo sau nhân vật.
Nghe thì có vẻ khó, nhưng chúng ta chỉ
cần thêm hành vi mới vào người chơi: hành vi Scroll To. Hành vi này sẽ khiến camera bám theo hình ảnh nhân vật,
và nếu có nhiều object được gán hành vi này, nó sẽ được quay vào trung tâm, giữa
tất cả các object. Thêm hành vi này và camera sẽ tự động theo sau người chơi.
Có một vấn đề nữa ở đây mà tôi muốn
nhắc đến. Nếu bạn đi quá xa về bên phải hoặc trái, bạn sẽ thấy nhân vật rơi ra
khỏi layout. Điều này là do không có bất cứ thứ gì cản nhân vật rơi xuống. Có
hai cách để ngăn chặn điều này: xây hai bức tường ở bên trái hoặc phải hoặc sử
dụng một hành vi để dừng object đi ra khỏi layout.
Hành vi này được gọi là Bound to Layout. Tất cả những object với hành vi này không thể đi
ra ngoài layout, như thể có một bức tường vô hình ngăn họ lại. Thêm nó vào
alien, chúng ta có thể dừng việc nhảy ra khỏi layout. Tất nhiên, thay vì một bức
tường vô hình, bạn cũng có thể làm một vách đá hoặc sông, tùy thuộc vào game của
bạn.
5. Nhảy qua các platform
Bây giờ, hãy đến khía cạnh hấp dẫn nhất
của game platformer: nhảy qua các platform. Ở đây, ta sẽ làm 2 loại platform: một
là va từ bên dưới, hai là nhảy qua từ bên dưới. Tất cả các nền đất đều có thể
bước lên. Để tạo loại nền đất đầu tiên, chúng ta chỉ cần thêm hành vi Solid vào object mà ta muốn làm nền tảng.
Chúng ta sẽ làm boxAlt object như một
nền đất, vì vậy hãy thêm hành vi Solid
vào nó.
Hãy thử kiểm tra trò chơi ngay bây giờ, và ta có
thể thấy boxAlt như một nền đất rắn.
Tuy nhiên, alien lại nhảy ko đủ cao để đập vào nó trong một lần nhảy; hãy khiến
hắn nhảy cao hơn. Để làm điều nay, chúng ta phải thay đổi giá trị của thuộc
tính Jump strength ở thuộc tính của
hành vi Platform, màn hình như sau:
Test game lại một lần nữa, alien đã
có thể nhảy lên platform trong một lần nhảy.
Điều tiếp theo chúng ta muốn làm đó
là làm platform mà người chơi muốn nhảy qua. May mắn cho ta, có một hành vi cho
thể loại này được gọi là Jump-thru,
Thêm nó vào boxEmpty object, và ta đã
có loại platform mà ta muốn. Thử nhảy từ bên dưới boxEmpty object, bạn sẽ thấy alien nhảy qua nó như ta đã cài đặt.
Còn một điều nữa ta cần làm với Jump-thru
platform: để nhảy xuống khi ta đang ở trên nó. Hành động này cần thêm 1 sự kiện.
Chúng ta sẽ khiến nhân vật khi chúng ta ấn phím mũi tên xuống hoặc phím cách,
vì đây là thiết kế khá trực quan sẽ làm cho mã xuất hiện như sau:
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é