Cách sử dụng Sprite trong Arcade để phát triển game
Nhiều game sử dụng sprite (ảnh nhỏ trong một ảnh lớn hơn) để đại diện cho nhân vật. Trong bài viết này, cùng FUNiX tìm hiểu cách thư viện Arcade của Python giúp chúng ta dễ dàng làm việc với sprite.
Table of Contents
Với tính năng mạnh mẽ và cú pháp đơn giản của Arcade, việc thêm các sprite trở nên dễ dàng. Thư viện này cho phép bạn dễ dàng cải thiện game của mình với các nhân vật và đồ vật hấp dẫn.
Tạo một game đơn giản
Code được dùng trong bài viết có trong kho lưu trữ GitHub này và bạn được dùng miễn phí theo giấy phép MIT.
Trước khi bắt đầu, hãy cài đặt pip trên máy của bạn. Sử dụng lệnh dưới đây để cài đặt thư viện arcade:
pip install arcade
Bắt đầu bằng cách tạo một game đơn giản bằng thư viện Arcade của Python, trong đó người chơi sẽ có thể di chuyển sang trái và phải.
Tạo một lớp MyGame kế thừa từ arcade.Window. Sau đó, hãy xác định phương thức thiết lập để khởi tạo các biến và phương thức on_draw để vẽ các đối tượng game. Phương thức on_key_press cho phép người chơi di chuyển hình chữ nhật màu xanh dương sang trái hoặc phải.
Đây là code cho game cơ bản của bạn:
import arcade
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
def setup(self):
self.player_x = 320
def on_draw(self):
arcade.start_render()
arcade.draw_rectangle_filled(self.player_x, 50, 50, 50, arcade.color.BLUE)
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_x -= 10
elif key == arcade.key.RIGHT:
self.player_x += 10
def main():
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()
if __name__ == "__main__":
main()
Cách thêm Sprite vào game của bạn
Bây giờ bạn đã có một game đơn giản đang hoạt động, đã đến lúc nâng cao nó bằng cách thêm một số sprite. Bạn có thể tạo các sprite bằng cách sử dụng lớp arcade.Sprite. Bạn có thể tải hình ảnh để đại diện cho sprite của mình và sử dụng chúng trong game.
Tải tệp hình ảnh có tên player.png để tạo sprite cho người chơi (player sprite) của bạn. Đặt vị trí ban đầu của nó ở giữa màn hình. Trong phương thức on_draw , hãy vẽ player sprite bằng chức năng vẽ.
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_sprite = None
def setup(self):
self.player_sprite = arcade.Sprite("player.png")
self.player_sprite.center_x = SCREEN_WIDTH // 2
self.player_sprite.center_y = SCREEN_HEIGHT // 2
def on_draw(self):
arcade.start_render()
self.player_sprite.draw()
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_sprite.change_x = -5
elif key == arcade.key.RIGHT:
self.player_sprite.change_x = 5
def update(self, delta_time):
self.player_sprite.update()
Các tính năng Sprite khác
Sprite trong Arcade cung cấp nhiều tính năng khác ngoài chuyển động cơ bản. Ví dụ: bạn có thể thay đổi kích thước sprite bằng cách đặt thuộc tính tỷ lệ (scale attribute) cho nó.
Bạn có thể đặt thuộc tính tỷ lệ của player sprite thành 0,5 để làm cho nó bằng một nửa kích thước ban đầu.
class MyGame(arcade.Window):
def setup(self):
self.player_sprite = arcade.Sprite("player.png", scale=0.5)
Kiểm soát chuyển động của Sprite
Sprite trong Arcade cung cấp nhiều cách để kiểm soát chuyển động của người chơi. Ngoài thuộc tính change_x , bạn có thể dùng thuộc tính change_y để điều khiển chuyển động thẳng đứng. Đối với các mẫu chuyển động phức tạp hơn, bạn cũng có thể dùng thuộc tính change_angle để xoay nhân vật.
self.player_sprite.change_angle = ROTATION_SPEED
Bằng cách kết hợp các thuộc tính này với đầu vào bàn phím hoặc chuột, bạn có thể điều khiển chuyển động linh hoạt và nhạy bén cho player sprite của mình.
Thêm phát hiện va chạm với Sprite
Phát hiện va chạm (Collision Detection) là rất quan trọng trong nhiều game. Với Arcade, bạn có thể dễ dàng phát hiện va chạm giữa các sprite bằng hàm arcade.check_for_collision. Hãy sửa đổi code dưới đây để bao gồm phát hiện va chạm giữa player sprite và một nhân vật khác gọi là obstacle.png:
class MyGame(arcade.Window):
def __init__(self, width, height):
super().__init__(width, height)
arcade.set_background_color(arcade.color.WHITE)
self.player_sprite = None
def setup(self):
self.player_sprite = arcade.Sprite("player.png", scale=0.1)
self.obstacle_sprite = arcade.Sprite("obstacle.png", scale = 0.1)
self.obstacle_sprite.center_x = SCREEN_WIDTH
self.obstacle_sprite.center_y = SCREEN_HEIGHT // 2
self.player_sprite.center_x = SCREEN_WIDTH // 2
self.player_sprite.center_y = SCREEN_HEIGHT // 2
def on_draw(self):
arcade.start_render()
self.player_sprite.draw()
self.obstacle_sprite.draw()
def on_key_press(self, key, modifiers):
if key == arcade.key.LEFT:
self.player_sprite.change_x = -5
elif key == arcade.key.RIGHT:
self.player_sprite.change_x = 5
def update(self, delta_time):
self.player_sprite.update()
self.obstacle_sprite.update()
if arcade.check_for_collision(self.player_sprite, self.obstacle_sprite):
print("Collision detected!")
Làm cho game hấp dẫn hơn với Sprite
Các sprite làm cho các nhân vật, đồ vật và hoạt ảnh trong game trông chân thực và thú vị. Chúng có thể di chuyển, va chạm, tương tác với những thứ khác trong game của bạn, giúp game trở nên cuốn hút hơn.
Sử dụng các sprite, bạn có thể tạo các game khiến người chơi bị cuốn vào và muốn chơi nhiều hơn. Sprites mở ra một thế giới rộng mở để tạo ra các game hấp dẫn và đáng nhớ.
Tìm hiểu các khóa học lập trình của FUNiX tại đây:
Vân Nguyễn
Dịch từ: https://www.makeuseof.com/arcade-game-development-use-sprites/
Bình luận (0
)