Chương 4. Tạo một game breakout
Chúng ta đã tạo trò chơi đầu tiên của mình
trong chương trước. Nếu bạn vẫn nhớ những gì chúng ta đã làm ở chương đó, chúng
ta đã sử dụng biến thực thể để làm 2 việc: máy bay đập cánh và mặt đất lặp lại.
Chúng ta chỉ sử dụng biến thực thể loại Boolean
trong khi vẫn còn 2 loại biến khác.
Những loại khác có thể được sử dụng để thao
tác một object; nếu bạn thấy Mario trở
nên lớn hơn sau khi ăn nấm hoặc bất tử sau khi ăn được một sao, đó là những ví
dụ về việc thay đổi trạng thái của một object. Chúng ta có thể tạo ra một thứ
như thế ở chương này:
Trong
chương này, chúng ta sẽ đề cập đến các chủ đề sau:
- Thêm nhiều cách để sử dụng biến thực thể.
- Constant variable là gì?
- Expression là gì và cách sử dụng nó.
- Làm sao để một object nảy lên các object khác?
- Sub – event là gì?
Bài 1. Tạo thiết kế
Giống như chương trước, chúng ta sẽ bắt đầu
chương này bằng cách làm thiết kế của trò chơi mà chúng ta muốn thực hiện. Có lẽ
bạn đã đoán được bởi đọc tên chương rằng chúng ta sẽ tạo một game breakout. Breakout
là một trò chơi mà bạn di chuyển một thanh sắt nằm ngang ở dưới cùng màn hình để
tung một quả bóng và phá hủy các khối bên trên.
Tuy nhiên, một số khối có thể sẽ thêm một vài biến
hóa. Hãy bắt đầu với tiêu chuẩn sau:
- Elicator pitch: là miêu tả về trò chơi của bạn khi bạn giải thích cho ai đó, ngắn gọn và súc tích. Trong Trò chơi này, người chơi sẽ điều khiển một cái thanh nằm ngang để đẩy quả bóng đập vỡ các khối. Một vài khối có thể thay đổi hiệu ứng.
- Theme: Chủ đề cho trò chơi này là trí tuệ.
- Genre: Thể loại game trí tuệ.
- Challenges: thử thách là phá hủy các khối ở 1 cấp độ.
- Reward: Người chơi được cho điểm tùy theo số khối phá được và thời gian hoàn thành cấp độ, các khối cũng có thể thay đổi theo điểm số.
- Điều kiện thắng: Tất cả các khối bị phá hủy.
- Điều kiện thua: Mỗi lần quả bóng rơi xuống dưới màn hình trò chơi, người chơi sẽ mất 1 sinh mạng, mất hết sinh mạng là người chơi thua.
- Dynamics: là những quy tắc áp dụng trong trò chơi, chúng tạo thành những hướng dẫn rằng game này chơi như thế nào. Ví dụ trong game chúng ta thì dynamics như sau:
- Quả bóng sẽ đập vào thanh nằm ngang, các khối và 3 mặt (trừ mặt dưới) của trò chơi rồi bật ra.
- Quả bóng không thể đập vào phần mặt dưới.
- Thanh nằm ngang chỉ có thể di chuyển sang trái hoặc phải.
- Một số khối sẽ tạo hiệu ứng đặc biệt khi bị phá hủy.
- Mạch chính của trò chơi: định nghĩa trò chơi các trò chơi chơi như thế nào từ đầu tới cuối, từ khi bắt đầu level đến khi người chơi thắng hoặc thua:
- Nếu quả bóng rơi vào mặt dưới của trò chơi, người chơi mất một mạng.
- Nếu quả bóng đập vào một khối, khối đó sẽ bị phá hủy.
- Một vài khối sẽ cần đập nhiều hơn để có thể phá hủy hoàn toàn
- Nếu tất cả số khối bị phá hủy thì người chơi sẽ thắng
Có khá nhiều thiết kế cho game breakout, chúng
ta sẽ sử dụng thiết kế này để tạo ra một trò chơi ví dụ trong chương này.
Bài 2. Thiết kế hệ thống phần thưởng
Bây giờ, trước khi bắt tay vào C2, tôi muốn
chúng ta đặt ra thiết kế của trò chơi này chi tiết hơn nữa. Trước tiên, tôi muốn
giải thích cách tặng thưởng cho những người chơi. Ý tưởng trong đầu của tôi là
khiến cho mỗi khối chứa một giá trị sao cho mỗi lần bị phá hủy, điểm số được
thêm vào bởi cùng một giá trị. Tuy nhiên, vì số khối trong 1 level sẽ cân bằng
cho mỗi người chơi, kết quả mỗi người bằng nhau, nên tôi quyết định thêm một yếu
tố cuối cùng để thay đổi điểm số. Vì vậy, tôi thêm thời gian giới hạn cho người
chơi vượt qua level.
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é.
Bài 3. Thiết lập layout
Bây giờ chúng ta sẽ thiết lập layout cho trò
chơi. Không giống như chương trước tôi đã giải thích cách thêm object như thế
nào, ở chương này, tôi sẽ chỉ nói cho bạn
thêm object khi tôi muốn bạn thêm chúng vào layout. Tôi sẽ nói chi tiết
khi tôi giải thích một vài thứ mới.
- HUD
- Main
- Background
Để HUD ở đầu và Background ở cuối.
Thêm một sprite object vào Main layer và sử dụng paddleBlue sprite từ tệp Puzzle assets, đây sẽ là thanh chắn của
chúng ta. Sau đó, thêm sprite object khác với nhiệm vụ là quả bóng; sử dụng ballBlue object. Bây giờ chúng ta đã có
thanh chắn và quả bóng trong layout. Tiếp theo, chúng ta sẽ tạo đường biên cho
level của chúng ta, nhưng thay vì sử dụng 1 sprite dài, chúng ta sẽ lắp ráp nó
từ một sprite nhỏ. Đây là một kĩ thuật thường được sử dụng khi làm game.
Sử dụng nhiều sprite nhỏ rồi ghép với nhau hiệu
quả hơn là một sprite dài. Bởi vì khi bạn muốn tạo một sprite có kích thước
khác nhưng cùng chất liệu với thì bạn không cần phải vẽ lại hay kéo dài nó ra.
Điều này sẽ làm giảm chất lượng của sprite và tốn thời gian.
1. Sử dụng Tiled background object.
Tile background là một background được tạo bởi những
sprite như những viên gạch. Nếu bạn muốn sử dụng lại một sprite nhiều hơn thì sử
dụng Tile background object là tốt
hơn hết bởi 2 lí do:
- Dễ dàng hơn: Để tạo những tile mới, bạn chỉ cần kéo thả các tiled background object xung quanh và nó sẽ tạo ra các hàng và cột mới, không cần tạo phiên bản mới cho sprite. Nó cũng dễ dàng di chuyển hơn, nếu bạn cần.
- Được coi là 1 object: Đối lập với nhiều trường hợp của object, điều này làm cho nó dễ dàng hơn đối với C2 để quản lí đối tượng một cách chính xác và giúp trò chơi của bạn ko bị lag.
Ngoài việc được sử dụng làm biên giới của trò chơi, một tiled background object còn được sử dụng để xây dựng một game RPG, hay để xây dựng một level mới trong platformer game.
Thêm một object mới, lựa chọn tiled background từ
phần General, và đổi tên nó thành areaBorder. Bạn sẽ thấy một cửa sổ chỉnh
sửa hình ảnh giống như bạn đã thấy khi bạn thêm một sprite mới; điểm khác biệt
là ở đây không có animation bởi vì bạn không thể thêm animation cho tiled
background. Bạn cũng không thể thiết lập đa giác va chạm cho nó. Sử dụng element_grey_square cho sprite; cái này
thường được sử dụng cho các khối trò chơi, nhưng chúng ta không có các sprite
thích hợp cho biên giới, vì vậy ta sẽ sử dụng nó thay thế.
Một
điều cần lưu ý là bạn không thể sử dụng bất kì hình ảnh nào của tiled
background; nó phải là một hình vuông với chiều dài và rộng là 8x8, 16x16,
32x32, …
Đóng cửa sổ chỉnh sửa hình ảnh và chúng ta đã có
tiled background trong layout. Bạn có thể kéo thả một trong 8 điểm xung quanh
game object (bạn có thể thấy nó khi object được lựa chọn), và thay cho việc khiến
hình ảnh lớn hơn, bạn có thể thêm nhiều hàng và cột vào nó.
Sử dụng hình ảnh với kích thước “lũy thừa 2” cũng là một thói quen tốt khi tạo sprite hoặc asset được sử dụng trong lập trình game.
Sử dụng hình ảnh với kích thước “lũy thừa 2” cũng là một thói quen tốt khi tạo sprite hoặc asset được sử dụng trong lập trình game.
Có lẽ bạn cũng nhận ra điều này, khi bạn kéo 1
trong 8 điểm để thêm nhiều tile hơn, những tile mới khi được thêm vào sẽ không
đầy đủ kích thước, mà chỉ là một phần của nó.
Nếu đây là phần hình ảnh mà bạn muốn thì quá tuyệt
vời, nhưng thường thì không phải trường hợp này. Chúng ta muốn object được thêm
vào những chiều dài và rộng mới một cách chính xác của tile. May mắn là điều
này rất dễ dàng trong C2: sử dụng Snap to
grid. Làm theo những bước sau:
- Ở bên trên C2, bạn sẽ thấy 3 mục ở gần mục File: đó là Home, View và Events.
- Kích vào mục View và chọn mục Snap to grid để căn vị trí của object và thay đổi kích thước lưới.
Vậy lưới là gì? Nếu bạn muốn thấy lưới, bạn chọn Show grid. Sự thiết lập này chỉ làm việc trên một layout. Nếu bạn muốn làm thế với các layout khác, bạn phải check nó ở mỗi layout.
Để
dễ dàng hơn trong việc đặt object vào layout, bạn có thể thiết lập layout tới Snap to grid. Làm vậy sẽ khiến vị trí
và kích thước của object theo lưới.
Bây giờ di chuyển areaBorder và tạo nhiều biến thể của nó để tạo biên giới game như
sau:
Đã xong, giờ bạn có thể chuyển sang phần tiếp
theo của game: di chuyển tấm ván.
2. Di chuyển tấm ván về hai hướng
2. Di chuyển tấm ván về hai hướng
Di chuyển tấm ván không phải là điều khó, bạn
có thể làm điều này bởi sử dụng hành vi di chuyển (movement behavior) giống ở
chương 3. Điều quan tọng nhất là chúng ta muốn tấm ván chỉ di chuyển về hai hướng
trái và phải. Tôi sẽ giải thích làm cái này như thế nào bởi sử dụng game object
khác: Mouse object.
Điều này sẽ khiến tấm ván chỉ di chuyển theo con
trỏ chuột trên trục x. Nếu bạn test thử bây giờ thì bạn sẽ thấy nó di chuyển
như bạn muốn, theo 2 hướng. Tuy nhiên, có gì đó sai sai, tấm ván đã đi ra khỏi
biên giới. Đây là điều ta ko muốn. Chính vì vậy ta phải dừng nó lại. Đơn giản lắm,
bạn chỉ cần nói với tấm ván thế này: “Ko được đi tiếp nữa nếu mày đã đến nơi mà
tao chỉ định”. Tất nhiên là nó sẽ không hiểu đâu, nhưng nó sẽ hiểu nếu bạn chuyển
sang dạng code như thế này:
Hãy thử test lại bây giờ, tấm ván đã ko chạy ra khỏi biên giới được nữa. Giờ thì ta chuyển sang phần quả bóng thôi nào.
Hãy thử test lại bây giờ, tấm ván đã ko chạy ra khỏi biên giới được nữa. Giờ thì ta chuyển sang phần quả bóng thôi nào.
3. Làm cho quả bóng bật lên
Nếu
bạn nhìn vào thuộc tính của hành vi Bullet trên thanh Properties, bạn có thể nhìn thấy một thuộc tính của nó: bounce off solids, nó được mặc định là No. Bằng cách chuyển nó thành Yes, bạn có thể khiến một object với
hành vi Bullet bật nảy vào tất cả
các vật rắn, nhưng vật rắn chính xác là gì?
Một vật rắn chỉ là một hành vi khác được thêm vào game object. Một object với hành vi được coi là một solid object, có nghĩa là những game object khác không thể đi qua nó, không thể nhảy qua nó, … Bởi vì ta muốn quả bóng bật vào tấm ván và biên giới, chúng ta sẽ thêm hành vi này cho chúng:
Sau khi thêm hành vi Solid cho tấm ván và vùng biên giới, chúng ta sẽ phải thay đổi góc của quả bóng một chút để nó di chuyển ở một góc chéo vào đầu level… Vì vậy để nó ở 45o để nó di chuyển vào góc dưới bên phải (hoặc bất cứ góc nào bạn muốn), và sau khi chuyển thuộc tính Bounce off solid thành true, chúng ta đã xong. Vào test thử xem, quả bóng đã bật lại tấm ván và biên giới, giờ ta chỉ thiếu những khối nữa là xong.
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é
Chúng ta sẽ làm 2 điều: quả bóng sẽ tự động di
chuyển khi game bắt đầu và bật lên vào những object. Hai điều này có thể thực
hiện bằng sử dụng hành vi chuyển động (movement behavior) mà ta đã học được ở
chương trước. Ta sẽ thêm hành vi Bullet
cho quả bóng để nó luôn di chuyển trong 1 hướng. Tuy nhiên, nếu chỉ sử dụng
hành vi Bullet thì sẽ không khiến nó bật nảy được.
Một vật rắn chỉ là một hành vi khác được thêm vào game object. Một object với hành vi được coi là một solid object, có nghĩa là những game object khác không thể đi qua nó, không thể nhảy qua nó, … Bởi vì ta muốn quả bóng bật vào tấm ván và biên giới, chúng ta sẽ thêm hành vi này cho chúng:
Sau khi thêm hành vi Solid cho tấm ván và vùng biên giới, chúng ta sẽ phải thay đổi góc của quả bóng một chút để nó di chuyển ở một góc chéo vào đầu level… Vì vậy để nó ở 45o để nó di chuyển vào góc dưới bên phải (hoặc bất cứ góc nào bạn muốn), và sau khi chuyển thuộc tính Bounce off solid thành true, chúng ta đã xong. Vào test thử xem, quả bóng đã bật lại tấm ván và biên giới, giờ ta chỉ thiếu những khối nữa là xong.
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é