/ / Làm sinh động các đối tượng trò chơi với thư viện Arcade

Làm sinh động các đối tượng trò chơi với thư viện Arcade

Hoạt hình đóng một vai trò quan trọng trong việc nâng cao sức hấp dẫn trực quan và mức độ tương tác của trò chơi điện tử. Thư viện Arcade là một khung Python để tạo trò chơi 2D. Nó cung cấp một cách đơn giản và hiệu quả để kết hợp hoạt ảnh vào các dự án trò chơi của bạn.



Bạn có thể sử dụng thư viện Arcade để tạo hoạt ảnh chuyển động cơ bản và hoạt ảnh được đồng bộ hóa với các sự kiện trong trò chơi.



Tạo một trò chơi đơn giản

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt pip trên thiết bị của mình. Sử dụng lệnh này để cài đặt thư viện arcade:

 pip install arcade 

Sau đó, tạo một tệp Python có tên đơn giản-game.py và bắt đầu bằng cách thiết lập một trò chơi mà người chơi có thể di chuyển sang trái và phải.

Mã được sử dụng trong bài viết này có sẵn trong kho lưu trữ GitHub này và bạn được sử dụng miễn phí theo giấy phép MIT.

Sử dụng thư viện Arcade, bạn có thể tạo cửa sổ, thiết lập môi trường trò chơi và xử lý đầu vào của người chơi. Đây là một đoạn mã để bắt đầu:

 import arcade

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2

    def on_draw(self):
        arcade.start_render()
       col = arcade.color.BLUE
       arcade.draw_circle_filled(self.player_x, self.player_y, 20, col)

    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()
    arcade.run()

if __name__ == "__main__":
    main()

Thêm hoạt hình chuyển động cơ bản

Bây giờ, hãy đưa trò chơi của bạn tiến thêm một bước và thêm hoạt ảnh chuyển động cơ bản vào đối tượng người chơi. Để tạo hiệu ứng chuyển động cho người chơi, hãy tạo 3 vòng tròn khác nhau và lặp lại giữa các vòng tròn đó một cách tuần tự khi người chơi bắt đầu di chuyển. Đây là đoạn mã được cập nhật cho chuyển động-animation.py tài liệu:

 class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2
        self.frame_counter = 0

    def on_draw(self):
        arcade.start_render()
        col1 = arcade.color.BLUE
        col2 = arcade.color.GREEN
        col3 = arcade.color.RED

        if self.frame_counter < 10:
            arcade.draw_circle_filled(self.player_x, self.player_y, 20,col1 )
        elif self.frame_counter < 20:
            arcade.draw_circle_filled(self.player_x, self.player_y, 20,col2 )
        else:
            arcade.draw_circle_filled(self.player_x, self.player_y, 20, col3)

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 10
            self.frame_counter = (self.frame_counter + 1) % 30
        elif key == arcade.key.RIGHT:
            self.player_x += 10
            self.frame_counter = (self.frame_counter + 1) % 30

Đây là một khung đầu ra ví dụ:

đối tượng người chơi hoạt hình một màu thay đổi

Kiểm soát tốc độ và hướng hoạt hình

Để kiểm soát tốc độ hoạt ảnh, bạn có thể giới thiệu hệ thống tốc độ khung hình. Bạn cũng có thể thay đổi thứ tự của các khung tùy thuộc vào hướng di chuyển của người chơi. Khi người chơi di chuyển từ trái sang phải, các khung hình sẽ hiển thị theo thứ tự ngược lại.

Đây là đoạn mã sửa đổi cho tốc độ khung hình.py tài liệu:

 class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "My Game")
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2
        self.frame_counter = 0
        col1 = arcade.color.BLUE
        col2 = arcade.color.GREEN
        col3 = arcade.color.RED
        self.frames = [col1, col2, col3]
        self.frame_rate = 10

    def on_draw(self):
        arcade.start_render()
        frame_index = self.frame_counter // self.frame_rate % len(self.frames)

        if self.player_x < SCREEN_WIDTH // 2:
            frame_index = len(self.frames) - 1 - frame_index

        index = self.frames[frame_index]
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, index)

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= 10
            self.frame_counter += 1
        elif key == arcade.key.RIGHT:
            self.player_x += 10
            self.frame_counter += 1

Sử dụng toán tử mô đun % với len(self.frames) để đảm bảo rằng frame_index luôn nằm trong phạm vi khung có sẵn. Điều này ngăn cản việc Chỉ mụcLỗi khỏi xảy ra khi hoạt ảnh lặp qua các khung hình.

Điều chỉnh tỷ lệ khung hình giá trị để kiểm soát tốc độ hoạt hình và tận hưởng chuyển động hoạt hình của các đối tượng trong trò chơi của bạn.

Bao gồm các tính năng bổ sung

Thư viện Arcade cung cấp nhiều tính năng khác nhau để nâng cao hoạt ảnh của bạn.

hiệu ứng hạt

Bạn có thể tạo các hiệu ứng hạt, chẳng hạn như vụ nổ hoặc khói, để tăng tính chân thực cho trò chơi của mình. Tạo một tệp có tên hạt.py và thêm mã dưới đây để triển khai hệ thống hạt đơn giản bằng Python và thư viện arcade:

 import arcade
import random


SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600


WHITE = (255, 255, 255)


class Particle:
    def __init__(self, x, y, dx, dy, radius, color, lifespan):
        self.x = x
        self.y = y
        self.dx = dx
        self.dy = dy
        self.radius = radius
        self.color = color
        self.lifespan = lifespan

    def update(self):
        self.x += self.dx
        self.y += self.dy
        self.lifespan -= 1

    def draw(self):
        arcade.draw_circle_filled(self.x, self.y, self.radius, self.color)


class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "Particle Example")
        self.particles = []

    def setup(self):
        
        for _ in range(100):
            x = random.randrange(SCREEN_WIDTH)
            y = random.randrange(SCREEN_HEIGHT)
            dx = random.uniform(-1, 1)
            dy = random.uniform(-1, 1)
            radius = random.uniform(2, 5)
            color = arcade.color.WHITE
            lifespan = random.randint(60, 120)
            particle = Particle(x, y, dx, dy, radius, color, lifespan)
            self.particles.append(particle)

    def on_draw(self):
        arcade.start_render()
        for particle in self.particles:
            particle.draw()

    def update(self, delta_time):
        for particle in self.particles:
            particle.update()

            if particle.lifespan <= 0:
                self.particles.remove(particle)

def main():
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    game.setup()
    arcade.run()

if __name__ == "__main__":
    main()

Bạn sẽ thấy một hình ảnh động bao gồm nhiều hạt chuyển động:

các hạt phân bố trên cửa sổ trò chơi

Ảnh động tương tác

Triển khai hoạt ảnh tương tác phản hồi đầu vào của người dùng hoặc sự kiện trò chơi. Ví dụ: khi người chơi tương tác với một đối tượng, đối tượng đó có thể tạo hiệu ứng động, thay đổi màu sắc hoặc biến đổi theo một cách nào đó. Những hoạt ảnh tương tác này cung cấp thông tin phản hồi và nâng cao mức độ tương tác của người chơi với trò chơi. Đây là mã cho tương tác-animation.py tài liệu:

 import arcade


SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600


WHITE = (255, 255, 255)
RED = (255, 0, 0)

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height, "Interactive Animation")
        self.player_x = 400
        self.player_y = 300
        self.player_radius = 30
        self.player_color = RED
        self.animation_radius = 60
        self.animation_color = WHITE
        self.animation_active = False

    def on_draw(self):
        arcade.start_render()

        arcade.draw_circle_filled(self.player_x,
                                  self.player_y,
                                  self.player_radius,
                                  self.player_color)

        if self.animation_active:
            arcade.draw_circle_filled(self.player_x,
                                       self.player_y,
                                       self.animation_radius,
                                       self.animation_color)

    def on_mouse_press(self, x, y, button, modifiers):
        if (self.player_x - self.player_radius <=
            x <= self.player_x + self.player_radius and
                self.player_y - self.player_radius <=
            y <= self.player_y + self.player_radius
       ):
            self.animation_active = True

    def update(self, delta_time):
        if self.animation_active:
            self.animation_radius += 1

            if self.animation_radius > 100:
                self.animation_active = False
                self.animation_radius = 0

def main():
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    arcade.run()

if __name__ == "__main__":
    main()

Ghi đè các phương thức cần thiết, chẳng hạn như on_draw, on_mouse_presscập nhậtđể xử lý vẽ trình phát và hoạt ảnh, xử lý nhấp chuột và cập nhật hoạt ảnh.

Để vẽ người chơi, hãy sử dụng arcade.draw_circle_fill chức năng, trong đó có (x, y) tọa độ của tâm, bán kính và màu sắc làm đối số. Hàm draw_circle_fill là một trong những công cụ của Arcade mà bạn có thể sử dụng để vẽ nội dung trò chơi. Trong trường hợp này, bạn có thể vẽ một vòng tròn lớn dần bằng cách thay đổi bán kính theo thời gian.

Các on_mouse_press phương thức chạy khi người dùng nhấp chuột. Nó kiểm tra xem tọa độ chuột có nằm trong giới hạn của đối tượng người chơi hay không và kích hoạt hoạt ảnh nếu chúng nằm trong giới hạn đó.

Các phương pháp hay nhất để thêm hoạt ảnh

Khi thêm hoạt ảnh vào trò chơi của bạn, hãy xem xét các phương pháp hay nhất sau:

Giới hạn số lượng hoạt ảnh

Có nhiều hoạt ảnh với nhiều khung hình có thể ảnh hưởng đến hiệu suất. Cân nhắc giảm thiểu số lượng hoạt ảnh hoặc khung hình cần thiết, đặc biệt đối với các yếu tố không quan trọng trong trò chơi. Đơn giản hóa hoạt ảnh có thể giúp duy trì tốc độ khung hình nhất quán và tối ưu hóa việc sử dụng tài nguyên.

Kết xuất hàng loạt đối tượng tương tự

Nhóm các đối tượng tương tự có cùng khung hoạt hình và kết cấu lại với nhau và hiển thị chúng dưới dạng một lô. Batching làm giảm số lượng cuộc gọi bốc thăm, dẫn đến hiệu suất được cải thiện. Kỹ thuật này đặc biệt hữu ích khi tạo hoạt ảnh cho các đối tượng sử dụng cùng một trang tính ma hoặc có trình tự hoạt ảnh tương tự.

Sử dụng phép nội suy để có hoạt ảnh mượt mà

Áp dụng các kỹ thuật nội suy, chẳng hạn như nội suy tuyến tính (lerping), để đạt được hiệu ứng chuyển tiếp mượt mà. Phép nội suy tính toán các giá trị trung gian giữa các khung hình chính hoạt ảnh để tạo chuyển động linh hoạt. Cách tiếp cận này ngăn chặn các bước nhảy đột ngột hoặc chuyển động giật cục giữa các khung hình, mang lại hình ảnh động hấp dẫn hơn về mặt hình ảnh.

Xem xét tốc độ và thời gian hoạt ảnh

Thử nghiệm với các tốc độ và thời gian hoạt ảnh khác nhau để tìm ra sự cân bằng phù hợp cho trò chơi của bạn. Điều chỉnh thời lượng khung hình hoặc sử dụng các chuỗi hoạt hình khác nhau để tạo ra các biến thể về tốc độ, gia tốc hoặc giảm tốc. Những điều chỉnh này có thể thêm chiều sâu và đặc điểm cho hoạt ảnh trong trò chơi của bạn.

Kiểm tra và tối ưu hóa

Thường xuyên kiểm tra hoạt ảnh của bạn trên các thiết bị khác nhau và theo dõi hiệu suất. Tìm kiếm các nút cổ chai tiềm năng hoặc sự chậm lại và tối ưu hóa cho phù hợp. Quá trình này giúp đảm bảo trải nghiệm hoạt hình mượt mà và nhất quán trên nhiều loại thiết bị.

Làm cho trò chơi hấp dẫn hơn với hoạt ảnh

Việc thêm hoạt ảnh vào trò chơi của bạn có thể nâng cao đáng kể mức độ tương tác và đắm chìm của người chơi. Hoạt ảnh cung cấp phản hồi trực quan cho các hành động của người chơi, làm cho trò chơi trở nên trực quan và thú vị hơn. Chúng làm cho thế giới trò chơi trở nên sống động, tạo cảm giác chân thực và phấn khích.

Cho dù đó là một nhân vật đang chạy, một vật thể phát nổ hay một hiệu ứng chuyển tiếp đơn giản, hoạt ảnh đều góp phần mang lại trải nghiệm chơi trò chơi năng động và hấp dẫn hơn.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *