/ / Cách thêm máy ảnh vào trò chơi điện tử bằng Python

Cách thêm máy ảnh vào trò chơi điện tử bằng Python

camera with a game concept arcade

Thư viện Arcade của Python là một khung mạnh mẽ và thân thiện với người dùng để tạo trò chơi 2D. Một tính năng quan trọng có thể nâng cao đáng kể lối chơi và trải nghiệm người dùng là việc bổ sung một camera. Việc thêm máy ảnh vào trò chơi của bạn cho phép thao tác chế độ xem động, cho phép người chơi khám phá thế giới trò chơi rộng lớn hơn, tập trung vào các khu vực cụ thể hoặc theo dõi các đối tượng đang chuyển động.


Bằng cách di chuyển góc nhìn của máy ảnh, bạn có thể tạo các hiệu ứng trực quan hấp dẫn, nâng cao cơ chế chơi trò chơi và mang lại trải nghiệm chơi trò chơi sống động hơn.


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

Trước khi bắt đầu, hãy cài đặt pip trên thiết bị của bạn và sử dụng lệnh bên dưới để cài đặt giải trí mô-đun:

 pip install arcade 

Bây giờ, hãy bắt đầu bằng cách tạo một trò chơi cuộn bên cơ bản trong đó người chơi điều khiển một nhân vật có thể di chuyển sang trái và phải bằng các phím mũi tên.

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.

Ngoài ra, bạn có thể thêm một chướng ngại vật để người chơi di chuyển xung quanh.

 import arcade

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
MOVEMENT_SPEED = 5

class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        self.player_x = width // 2
        self.player_y = height // 2

    def setup(self):
        arcade.set_background_color(arcade.color.SKY_BLUE)

    def on_draw(self):
        arcade.start_render()
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
        arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)

    def update(self, delta_time):
        pass

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

if __name__ == "__main__":
    game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)
    game.setup()
    arcade.run()

Thiết lập máy ảnh

Để thêm camera vào trò chơi, hãy tạo một Máy ảnh lớp quản lý vị trí và chuyển động của camera. Lớp này sẽ có các thuộc tính như camera_xcamera_y để lưu tọa độ của máy ảnh.

 class Camera:
    def __init__(self):
        self.camera_x = 0
        self.camera_y = 0

Chuyển động của máy ảnh với đầu vào bàn phím

Tiếp theo, sửa đổi trò chơi on_key_press phương pháp bao gồm chuyển động của camera dựa trên thông tin đầu vào của người chơi. Khi người chơi di chuyển sang trái hoặc phải, bạn có thể cập nhật vị trí của máy ảnh cho phù hợp. Ngoài ra, hãy điều chỉnh mã vẽ để tính đến vị trí của máy ảnh khi hiển thị các đối tượng trong trò chơi.

 class MyGame(arcade.Window):
    def __init__(self, width, height):
        super().__init__(width, height)
        self.camera = Camera()
        self.player_x = width // 2
        self.player_y = height // 2

    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player_x -= MOVEMENT_SPEED
            self.camera.camera_x -= MOVEMENT_SPEED
        elif key == arcade.key.RIGHT:
            self.player_x += MOVEMENT_SPEED
            self.camera.camera_x += MOVEMENT_SPEED

    def on_draw(self):
        arcade.start_render()
        arcade.set_viewport(
            self.camera.camera_x,
            self.camera.camera_x + SCREEN_WIDTH,
            self.camera.camera_y,
            self.camera.camera_y + SCREEN_HEIGHT
        )
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
        arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)

Chuyển động của máy ảnh với đầu vào chuột

Ngoài đầu vào bàn phím, bạn cũng có thể kích hoạt chuyển động của camera dựa trên đầu vào chuột. Ví dụ: bạn có thể cho phép người chơi xoay camera bằng cách kéo màn hình. Để đạt được điều này, sửa đổi on_mouse_drag phương pháp cập nhật vị trí của máy ảnh dựa trên chuyển động của chuột.

 class MyGame(arcade.Window):
    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        if buttons == arcade.MOUSE_BUTTON_LEFT:
            self.camera.camera_x -= dx
            self.camera.camera_y -= dy

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

Việc thêm máy ảnh vào trò chơi của bạn sẽ mở ra một thế giới khả năng cho các tính năng và hiệu ứng bổ sung. Dưới đây là một vài ví dụ về cách bạn có thể nâng cao hơn nữa trò chơi của mình bằng cách sử dụng hệ thống camera.

Chức năng thu phóng

Để triển khai chức năng thu phóng, bạn cần giới thiệu một phóng biến trong Máy ảnh lớp và sửa đổi on_mouse_scroll phương pháp cập nhật mức thu phóng dựa trên chuyển động của con lăn chuột. Bạn cũng cần điều chỉnh set_viewport thông số để xem xét mức độ zoom.

 class Camera:
    def __init__(self):
        self.camera_x = 0
        self.camera_y = 0
        self.zoom = 1.0

class MyGame(arcade.Window):

    def on_mouse_scroll(self, x, y, scroll_x, scroll_y):
        self.camera.zoom += scroll_y * 0.1

    def on_draw(self):
        arcade.start_render()
        arcade.set_viewport(
            self.camera.camera_x * self.camera.zoom,
            (self.camera.camera_x + SCREEN_WIDTH) * self.camera.zoom,
            self.camera.camera_y * self.camera.zoom,
            (self.camera.camera_y + SCREEN_HEIGHT) * self.camera.zoom
        )
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
        arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)

Chuyển động máy ảnh mượt mà

Để đạt được chuyển động của máy ảnh mượt mà hơn, bạn có thể sử dụng một kỹ thuật nội suy có tên là nội suy tuyến tính (lerp). Sửa đổi cập nhật phương pháp di chuyển dần camera về vị trí mục tiêu bằng cách sử dụng lerp. Điều này tạo ra một hiệu ứng chuyển tiếp mượt mà.

 class Camera:
    def __init__(self):
        self.camera_x = 0
        self.camera_y = 0
        self.target_x = 0
        self.target_y = 0
        self.lerp_speed = 0.1

    def update(self):
        self.camera_x = arcade.lerp(self.camera_x, self.target_x, self.lerp_speed)
        self.camera_y = arcade.lerp(self.camera_y, self.target_y, self.lerp_speed)

class MyGame(arcade.Window):

    def update(self, delta_time):
        self.camera.target_x = self.player_x - SCREEN_WIDTH // 2
        self.camera.target_y = self.player_y - SCREEN_HEIGHT // 2
        self.camera.update()

    def on_draw(self):
        arcade.start_render()
        arcade.set_viewport(
            self.camera.camera_x,
            self.camera.camera_x + SCREEN_WIDTH,
            self.camera.camera_y,
            self.camera.camera_y + SCREEN_HEIGHT
        )
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
        arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)

Hạn chế máy ảnh

Để ngăn máy ảnh di chuyển ra ngoài các ranh giới nhất định, bạn có thể đưa ra các ràng buộc. Ví dụ: bạn có thể xác định vị trí tối thiểu và tối đa của máy ảnh và đảm bảo rằng máy ảnh nằm trong các giới hạn đó.

 class Camera:
    def __init__(self):
        self.camera_x = 0
        self.camera_y = 0
        self.min_x = 0
        self.max_x = 800
        self.min_y = 0
        self.max_y = 600

    def update(self):
        self.camera_x = max(self.min_x, min(self.camera_x, self.max_x))
        self.camera_y = max(self.min_y, min(self.camera_y, self.max_y))

class MyGame(arcade.Window):

    def update(self, delta_time):
        self.camera.camera_x = self.player_x - SCREEN_WIDTH // 2
        self.camera.camera_y = self.player_y - SCREEN_HEIGHT // 2
        self.camera.update()

    def on_draw(self):
        arcade.start_render()
        arcade.set_viewport(
            self.camera.camera_x,
            self.camera.camera_x + SCREEN_WIDTH,
            self.camera.camera_y,
            self.camera.camera_y + SCREEN_HEIGHT
        )
        arcade.draw_circle_filled(self.player_x, self.player_y, 20, arcade.color.RED)
        arcade.draw_rectangle_filled(400, 200, 80, 40, arcade.color.GREEN)

Đây chỉ là một vài ví dụ về cách bạn có thể tận dụng hệ thống camera để đưa vào các tính năng và hiệu ứng bổ sung trong trò chơi Python Arcade của mình.

Bạn cũng có thể thêm nhiều tính năng bổ sung khác vào trò chơi dựa trên Python của mình. Chẳng hạn, bạn có thể làm cho máy ảnh ghi nhớ vị trí của nó khi người chơi di chuyển đến một cấp độ khác. Điều này đảm bảo rằng chế độ xem vẫn giữ nguyên khi chuyển đổi giữa các cấp độ, mang lại trải nghiệm mượt mà và nhất quán cho người chơi.

Các phương pháp hay nhất cho hệ thống camera

Khi triển khai hệ thống camera trong trò chơi Python Arcade của bạn, điều cần thiết là phải tuân theo các phương pháp hay nhất để đảm bảo chức năng tối ưu và trải nghiệm người chơi mượt mà. Dưới đây là một số nguyên tắc chính cần ghi nhớ:

  • Tránh di chuyển máy ảnh quá mức: Mặc dù máy ảnh có thể thêm các yếu tố động vào trò chơi của bạn, nhưng điều quan trọng là phải đạt được sự cân bằng và tránh chuyển động máy ảnh quá mức. Việc liên tục thay đổi vị trí của camera có thể khiến người chơi mất phương hướng và khiến họ gặp khó khăn trong việc điều hướng thế giới trò chơi.
  • Thử nghiệm trên các độ phân giải và tỷ lệ khung hình khác nhau: Điều cần thiết là kiểm tra hệ thống camera của bạn trên nhiều độ phân giải màn hình và tỷ lệ khung hình khác nhau để đảm bảo rằng hệ thống hoạt động tốt trên các thiết bị và cấu hình khác nhau. Điều này sẽ giúp bạn xác định bất kỳ vấn đề nào liên quan đến tỷ lệ khung nhìn, định vị đối tượng hoặc điều chỉnh tỷ lệ khung hình.
  • Tối ưu hóa kết xuất: Hệ thống camera có khả năng ảnh hưởng đến hiệu suất trò chơi, đặc biệt là khi hiển thị thế giới trò chơi rộng lớn hoặc nhiều đối tượng. Để tối ưu hóa kết xuất, hãy xác định đối tượng nào nằm ngoài chế độ xem của máy ảnh và loại trừ chúng khỏi kết xuất.
  • Xử lý các trường hợp cạnh: Hãy chú ý đến các trường hợp cạnh mà máy ảnh có thể gặp phải các tình huống cụ thể, chẳng hạn như ranh giới, phát hiện va chạm hoặc đối tượng chồng chéo. Đảm bảo rằng hệ thống camera xử lý các trường hợp này một cách mượt mà và cung cấp các chuyển tiếp mượt mà hoặc tín hiệu hình ảnh phù hợp để chỉ ra các hạn chế hoặc tương tác với môi trường trò chơi.

Bằng cách làm theo các phương pháp hay nhất này, bạn có thể tạo một hệ thống camera mạnh mẽ và thân thiện với người dùng, tích hợp liền mạch vào các trò chơi Python Arcade của bạn.

Làm cho trò chơi trở nên thú vị hơn bằng cách sử dụng máy ảnh

Bằng cách thêm máy ảnh vào trò chơi Python Arcade của bạn, bạn có thể nâng cao đáng kể mức độ tương tác và nhập vai của người chơi. Cho dù đó là tạo thế giới trò chơi mở rộng, tập trung vào các khu vực quan trọng hay theo dõi các đối tượng chuyển động, hệ thống camera đều cung cấp một công cụ mạnh mẽ cho các nhà phát triển trò chơi.

Tận dụng chuyển động của máy ảnh, tính năng thu phóng và các hiệu ứng bổ sung, bạn có thể tạo ra những trải nghiệm đầy mê hoặc thu hút người chơi và khiến họ quay lại để xem thêm.

Similar Posts

Leave a Reply

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