Một
game platformer mà chỉ có một cấp độ thì quá nhàm chán; chính vì vậy ta sẽ thêm
những cấp độ mới khó hơn và điều hướng đến nó. Đầu tiên, tạo một layout mới, mở
thành Project và ấn chuột phải vào tệp
Layouts. Kích vào Add layout để thêm layout mới. Một cửa
sổ sẽ hiện ra hỏi bạn có muốn thêm event
sheet hay ko. Cái này thì tùy bạn nhưng bây giờ ta sẽ thêm một event sheet
cùng với nó.
Sau
khi kích vào nút Add event sheet, bạn
sẽ thấy một layout trống; chúng ta sẽ thiết kế level thứ hai ở đây (nó không thực
sự là một level trong game vì nó rất ngắn, mà tôi không biết gọi ra sao nên gọi tạm
thế :’))). Một điều cần lưu ý là trong thiết kế layout mới, bạn không cần thêm
object mới; bạn có thể thêm một object từ layout khác nếu bạn muốn.
Nhớ rằng tuy layout mới hoàn toàn “ mới “ nhưng
không có nghĩa là nó cùng layer với layout cũ, cho đến khi bạn quyết định thêm
chúng. Bạn cũng có thể thay đổi kích thước của layout mới nếu bạn muốn.
Để
làm điều này, hãy nhìn vào thanh Projects,
bạn sẽ thấy tất cả những object mà bạn đã thêm vào project của mình được liệt kê ở tệp Object. Để thêm các object đã có vào layout mới, kéo thả object đó
từ tệp Object tới layout. Nhớ rằng bạn
không thể thả object đã tồn tại mà cùng kiểu với object đã được thêm vào toàn bộ dự
án, ví dụ Keyboard và Touch object đã được thêm vào toàn bộ dự
án.
Bây
giờ ta đã có layout mới, hãy thiết kế nó để có các object như: gressMid, boxAlt và boxEmpty giống như ở layout thứ nhất. Trước khi ta di chuyển đến
layout mới trong trò chơi, ta cần phải làm một số thứ để kết nối 2 layout với
nhau. Ở đây ta sẽ dùng một cánh cửa, thêm 2 object mới từ tệp Tiles trong tệp Base pack trong free bundle,
đó là door_openMid và door_openTop và đặt chúng vào cạnh
layout như sau:
Logic
của việc thay đổi này là: khi nhân vật va chạm với cánh cửa, thay đổi vị trí
sang layout mới. Bạn có thể thiết kế logic của riêng bạn trong trò chơi của bạn,
ví dụ như chơi phải nhấn nút … Code ở đây như sau:
Nếu
bạn test game bây giờ, bạn có thể thấy chúng ta đã đi được sang layout 2. Tuy
nhiên, có một điều rất lạ, chúng ta không thể di chuyển bất cứ thứ gì ở layout mới.
Chính xác, đó là do ta không đặt alien object vào đó, chính vì vậy hãy thêm alien
object vào layout 2 như sau:
Test
nó và bạn sẽ thấy ta có thể di chuyển tới layer 2 và di chuyển nhân vật của
chúng ta ở layout mới. Tuy nhiên, nhân vật của chúng ta không có hoạt ảnh; tại sao
thế ? Điều này là do mỗi layout có event sheet của riêng nó và ta chỉ thiết lập
animation của nhân vật trong layout 1.
Tất cả layout có event sheet của riêng nó. Nếu bạn
thêm animation cho 1 object ở layer này, nó vẫn sẽ không có hoạt ảnh ở layer khác.
Để tạo hoạt ảnh cho object ở layer khác, bạn chỉ cần copy sự kiện. Để làm điều
nay, bạn chỉ cần giữ Ctrl và nhấp vào tất cả sự kiện bạn muốn sao chép, nhấn
Ctrl C, đi tới event sheet của layout mới và nhấn Ctrl V.
Event
sheet của layout mới được liệt kê trong tệp Event sheet ở thanh Projects,
nháy đúp chuột để mở nó, sau đó dán các sự kiện hoạt ảnh vào đó.
Khi sao chép sự kiện, hãy chắc chắn là kích vào
sự kiện, không phải là tình huống trong sự kiện. Sao chép sự kiện và sao chép tình
huống là 2 việc khác nhau.
Nếu
bạn sao chép sự kiện, bạn có thể dán vào event sheet khác hoặc cùng một event
sheet. Tuy nhiên, nếu bạn sao chép điều kiện, bạn chỉ có thể dán chúng vào sự
kiện khác có thể; ví dụ bạn ko thể đặt hai điều kiện kích hoạt trong cùng 1 sự
kiệ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é.
7. Đập vào hộp tiền xu
Nếu bạn vẫn nhớ, chúng ta còn có 1 hộp
tiền xu mà chưa thao tác. Chúng ta sẽ thiết lập nó để khi người chơi đập vào từ
bên dưới thì nó sẽ tạo ra 1 đồng xu.
Cái hộp này chính là một biến thực thể
(instance variable) sẽ xác định có tiền xu bên trong hay ko. Khi người chơi va
chạm với cái hộp từ bên dưới, chúng ta sẽ kiểm tra biến thực thể này. Nếu giá
trị là true, nó sẽ đẻ ra 1 đồng xu;
còn nếu là false thì sẽ không có gì xảy
ra. Chúng ta cũng sẽ thay đổi sprite dựa trên biến thực thể này để chỉ rõ cho
người chơi biết có đập được vào hay ko.
Đầu tiên, tạo một biến thực thể là hasCoin loại Boolean và thay đổi giá trị ban đầu của nó thành true. Sau đó, chuyển tới event sheet. Chúng ta kiểm tra sự va chạm
từ bên dưới, vì vậy ta sẽ sử dụng sự kiện On
collision so sánh với tọa độ y của
alien với cái hộp. Nếu tọa độ của alien lớn hơn cái hộp thì tức là alien ở dưới
cái hộp. Sau đó, ta sử sử dụng một sự kiện phụ để kiểm tra giá trị của biến thực
thể Boolean:
Tôi
vẫn chưa viết hành động cho nó do ta muốn sinh ra một object thì ta phải tạo ra
nó trước tiên. Chèn một sprite object mới và đặt tên nó là coinGold. Bạn có thể lấy sprite này từ tệp Items trong tệp Base pack
và đặt nó ở đâu nó màn hình. Chúng ta muốn thay đổi sprite của object boxCoin, chính vì vậy ta sẽ thêm hoạt ảnh
cho nó. Nháy đúp chuột vào cái hộp để mở cửa sổ chỉnh sửa hình ảnh. Thêm một animation mới được gọi là Disabled, cho nó hình ảnh của boxCoin_disabled từ tệp Tiles, sau đó đóng cửa sổ chỉnh sửa hình
ảnh.
Chúng ta muốn coinGold object làm 2 điều khi ta tạo nó: di chuyển từ
từ lên trên và dần dần biến mất. Ta có thế làm thế với những hành
vi này: hành vi Bullet có thể sử
dụng để di chuyển lên trên, và để nó di chuyển chậm lại, ta chỉ cần
giảm tốc độ của nó. Để nó biến mất từ từ, chúng ta sẽ sử dụng
hành vi mới được gọi là Fade.
Hành vi Fade sẽ thay đổi độ mờ
của đối tượng theo thời gian và mặc định phá hủy đối tượng khi nó vô
hình. Thêm hai hành vi này vào coinGold
object và thiết lập tốc độ hành vi Bullet
thành 200 (hoặc thấp hơn nếu bạn muốn). Đừng quên thêm hành vi Solid cho boxCoin để chúng ta có thể va chạm với nó.
Chuyển tới event sheet ở layout 1; chúng ta chỉ cần thêm hành động tới sự kiện phụ hasCoinI
của object boxCoin. Bạn muốn
tạo đồng xu mới ở đây, thiết lập góc của sự di chuyển lên trên để
nó di chuyển lên trên, thay đổi hoạt ảnh của boxCoin để người chơi biết nó đã ko còn tiền xu, và cuối
cùng thiết lập biến thực thể hasCoin
thành false.
Bây
giờ, ta có thể test thử game. Nhớ rằng sau khi có nhiều hơn 1 layout
trong project, bạn cần chắc chắn rằng layout bạn lựa chọn cuối cùng
trước khi test là layout bạn muốn test. Đây là C2 luôn luôn chạy layout
được mở lần cuối khi test; nếu bạn mở layout 2 trước đó, hãy mở
layout 1 trước khi test. Lưu dự án của bạn trước khi tiếp tục, bởi vì
bạn sẽ học một vài thứ mới.
Bài 2. Học về vật lí
Chúng ta sẽ
thảo luận về vật lí trong C2. Để áp dụng vật lí vào một object, ta
chỉ cần thêm hành vi Physics vào
nó. Tất cả object với hành vi Physics
có thể gọi là những physic object. Vật lí là một chủ đề phức tạp,
tôi sẽ chỉ giải thích nó một cách ngắn gọn để đề cập đến những
gì bạn cần biết để bắt đầu thử nghiệm nó.
Nếu
bạn còn nhớ về những khái niệm vật lí mà bạn đã học thì rất hữu
ích, nó khá giống nhau. Chúng ta sẽ tạo ra layout 3 để chứng minh
physic object của chúng ta, chính vì vậy hãy tạo layout mới và thiết
kế nó như thế này:
Như
các bạn có thể thấy, chúng ta đã sử dụng 2 solid object mà chúng ta
đã sử dụng để xây dựng những level trước của ta. Tuy nhiên, chúng ta
sẽ thêm một sprite object mới được gọi là rock; sprite cho object rock
có thể được tìm thấy ở ttepj Base
pack / Items. Hòn đá sẽ ko làm bất cứ gì cả, nhưng ta sẽ sử dụng
nó như physic object, vì vậy hãy thêm một hành vi Physics vào nó.
Một
điều cần nhớ là, tất cả hành vi Physic đều bị ảnh hưởng bởi lực
hấp dẫn, tức là nó sẽ tự động rơi xuống nếu không có gì ngăn nó lại.
Nếu
chúng ta test layout 3, chúng ta sẽ mong được thấy hòn đá rơi xuống và
đập vào mấy cái thùng đang nổi. Không may thay, điều này sẽ ko xảy ra.
Tảng đá vẫn sẽ tiếp tục rơi qua mấy cái thùng và mặt đất. Tại sao?
Vì đơn giản là những physic object chỉ tương tác với physic object, nó
sẽ ko tương tác với các object khác có hành vi Solid hay Jump-thru.
Tại
sao lại vậy? Tại sao C2 lại không làm cho các solid object có thể tương
tác với physic object? Câu trả lời là mặc dù các physic object cũng
có thể coi là solid object nhưng solid object ko thể coi là physic object.
Có thể bạn ko biết, ĐỊnh luật 3 Niu tơn nói rằng mọi hành động đều
có sự phản ứng ngang nhau và ngược lại. Trong trò chơi của chúng ta,
điều này có nghĩa là khi một physic object va chạm với cảnh qan,
chẳng hạn như là cái thùng gỗ, sẽ bị đẩy lại một chút. Solid object
không thể tính toán được va chạm này, do đó physic object đã bỏ qa
chúng. Để làm cho cảnh quan tương tác với physic object, chúng ta phải
khiến cảnh quan trở thành physic object.
Physic
object chỉ tương tác với physic object, thế nên để physic object tương
tác với một cảnh quan, hãy thêm hành vi Physics cho nó.
Đợi 1 chút;
nếu chúng ta thêm hành vi Physics
cho cái thùng đang nổi thì liệu nó có rơi xuống như hòn đá không ta? Tôi
có nói là tất cả các physic object đều bị ảnh hưởng bởi lực hấp
dẫn phải ko nhỉ? Đúng thế, ngoại trừ các physics object không thể di
chuyển. Physics object ko thể di chuyển sẽ ko di chuyển khi bị ảnh
hưởng bởi trọng lực hay các vật thể khác, mục đích duy nhất của
chúng chính là ngăn cản các physics object khác.
Để
khiên một physics object không thể di chuyển, chúng ta chỉ cần thay đổi
giá trị của thuộc tính Immovable.
Bây giờ, hãy thêm hành vi Physics
cho boxAlt và thay đổi thuộc tính
Immovable thành Yes, như ở màn ảnh sau:
Test game bây
giờ, bạn sẽ thấy tảng đá va chạm với cái thùng y như ta mong đợi.
- Nếu bạn muốn người chơi sau này có thể tương tác với object, bạn có thể sử dụng physics object ko di chuyển. Ví dụ có một cái hộp mà người chơi ko di chuyển đc, nhưng vào một ngày đẹp trời nào đó mà nhân vật của người chơi biến thành siêu nhân, có khả năng đẩy được cái hộp, thì đó là lúc xài physics object ko di chuyển, thay giá trị của Immovable thành No trong code.
- Nếu object chỉ có tác dụng là vật cản thì nên dùng solid object
- Nếu người chơi chỉ tương tác với object một lần, thì nên dùng solid object, ví dụ nhân vật bắn một phát đạn vào cái cửa để mở cửa.
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é