Cách thêm một camera cuộn màn hình vào PyGame

Học cách tạo mẫu một camera có thể xoay hay cuộn khi chơi game sẽ thêm tính chân thực và làm trò chơi thú vị hơn. Dưới đây là cách thêm camera cuộn màn hình cho PyGame.

Lập trình game

Cuộn màn hình là một trong số tính năng phổ biến khi di chuyển trong thế giới game. Nhân tố này thêm chiều sâu và tính chân thực cho game, đồng thời, cải thiện trải nghiệm gameplay tổng thể.

Bạn có nhiều cách khác nhau để triển khai một camera cuộn màn hình trong PyGame, vì thế, đảm bảo bạn hiểu sự khác biệt giữa chúng.

Tạo một game đơn giản

Trước khi bắt đầu, cài đặt pip trên thiết bị và dùng lệnh bên dưới để cài đặt mô đun PyGame:

pip install pygame

Giờ, bạn có thể tạo một game đơn giản bằng một hình chữ nhật cho người chơi và hai nền tảng tĩnh. Người chơi có thể di chuyển sang trái và phải bằng các phím mũi tên.

Bắt đầu bằng cách nhập mô đun pygame. Sau đó, khởi tạo lại nó và tạo cửa sổ game bằng hàm pygame.display.set_mode(). Sau đó, đặt chú thích cho cửa sổ và tạo đối tượng đồng hồ để quản lý tốc độ khung hình.

import pygame

pygame.init()

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600

screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))

pygame.display.set_caption("My Simple Game")

clock = pygame.time.Clock()

BACKGROUND_COLOR = (255, 255, 255)

Tiếp theo, thiết lập người chơi và các nền tảng tĩnh. Xác định kích thước của người chơi và vị trí ban đầu của nó.

PLAYER_WIDTH = 50
PLAYER_HEIGHT = 50

player_x = WINDOW_WIDTH // 2 - PLAYER_WIDTH // 2
player_y = WINDOW_HEIGHT - PLAYER_HEIGHT - 20

PLAYER_SPEED = 10

RECTANGLE_COLOR_1 = (255, 0, 0)
RECTANGLE_COLOR_2 = (0, 0, 255)

rectangle_1 = pygame.Rect(200, 200, 100, 100)
rectangle_2 = pygame.Rect(500, 300, 150, 50)

Sau đó, tạo một vòng lặp game xử lý các sự kiện và cập nhật màn hình. Trong vòng lặp này, kiểm tra các sự kiện như thoát game hoặc di chuyển người chơi bằng phím mũi tên tương ứng.

while True:
    # Xử lý sự kiện
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    # Vẽ hình nền
    screen.fill(BACKGROUND_COLOR)

    # Vẽ hình chữ nhật tĩnh
    pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1)
    pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2)

    # Vẽ người chơi
    player_rect = pygame.Rect(player_x, player_y, PLAYER_WIDTH,
        PLAYER_HEIGHT)

    pygame.draw.rect(screen, (0, 0, 0), player_rect)

    # Update màn hình
    pygame.display.update()

    # Giới hạn tỷ lệ khung hình
    clock.tick(30)

Thiết lập camera

Giờ bạn đã có một game đơn giản với người chơi hình chữ nhật và hai nền tảng tĩnh, bạn có thể bắt đầu làm việc trên camera. Trong PyGame, về cơ bản, camera chỉ là một phần bù hoạt động cho mọi đối tượng bạn vẽ ở màn hình. Điều này có nghĩa là nếu bạn di chuyển máy ảnh sang trái, mọi thứ trên màn hình sẽ xuất hiện để di chuyển sang phải.

Tới bước thiết lập camera, đầu tiên, bạn cần xác định một biến để giữ độ lệch x của máy ảnh. Gọi biến này là camera_offset_x và khởi tạo nó sang 0.

# Đặt độ chênh lệch camera
camera_offset_x = 0

Tiếp theo, cập nhật vị trí của tất cả đối tượng mà bạn vẽ trên màn hình, để tính đến độ lệch của máy ảnh. Bạn có thể làm điều này bằng cách thêm giá trị camera_offset_x vào vị trí X của mỗi đối tượng. Ví dụ: bạn có thể cập nhật vị trí của người chơi như sau:

# Vẽ người chơi
player_rect = pygame.Rect(player_x + camera_offset_x, player_y, PLAYER_WIDTH,
    PLAYER_HEIGHT)

pygame.draw.rect(screen, (0, 0, 0), player_rect)

Tương tự, bạn có thể update vị trí của các nền tảng tĩnh như sau:

# Vẽ hình chữ nhật tĩnh
rectangle_1_draw_pos = rectangle_1.move(camera_offset_x, 0)
pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1_draw_pos)
    
rectangle_2_draw_pos = rectangle_2.move(camera_offset_x, 0)
pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

Di chuyển camera bằng bàn phím

Giờ bạn đã thiết lập camera thành công nên có thể di chuyển nó xung quanh. Một cách đơn giản để làm việc này là dùng bàn phím. Ví dụ, bạn có thể di chuyển camera sang trái khi người chơi nhấn phím mũi tên bên trái.

Để làm việc này, thêm code sau vào bên trong vòng lặp sự kiện xử lý thao tác nhập phím:

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_LEFT:
        camera_offset_x -= PLAYER_SPEED
    elif event.key == pygame.K_RIGHT:
        camera_offset_x += PLAYER_SPEED

Cách khác là thay đổi tọa độ x của người chơi khi nhấn phím, sau đó cập nhật phần bù camera. Bạn có thể thực hiện điều này như sau:

# Xử lý sự kiện
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        quit()

    if event.type == pygame.KEYDOWN:
         if event.key == pygame.K_LEFT:
             player_x -= PLAYER_SPEED
         elif event.key == pygame.K_RIGHT:
             player_x += PLAYER_SPEED

Sau đó, update độ lệch camera tương ứng với tọa độ x của người chơi như sau:

camera_offset_x = WINDOW_WIDTH // 2 - player_x - PLAYER_WIDTH // 2

Di chuyển camera bằng chuột

Cách khác để di chuyển camera là dùng chuột. Bạn có thể cho phép người chơi kéo màn hình xung quanh bằng cách click & kéo chuột.

Để làm việc này, theo dõi vị trí của chuột khi người chơi nhấn nút chuột trái. Khi di chuyển chuột, update tọa độ x của người chơi. Nó sẽ thay đổi theo sự khác biệt giữa vị trí chuột hiện tại và vị trí ban đầu bạn đã theo dõi, mouse_start_pos.

# Xử lý sự kiện
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()
        quit()

    if event.type == pygame.MOUSEBUTTONDOWN:
        if event.button == 1:
            mouse_start_pos = pygame.mouse.get_pos()

    if event.type == pygame.MOUSEMOTION:
        if pygame.mouse.get_pressed()[0]:
            mouse_current_pos = pygame.mouse.get_pos()
            mouse_offset_x = mouse_current_pos[0] - mouse_start_pos[0]
            player_x -= mouse_offset_x
            mouse_start_pos = mouse_current_pos

Trên đây là cách thêm cuộn camera vào PyGame. Hi vọng bài viết hữu ích với các bạn.

Thứ Năm, 16/03/2023 09:38
2,33 👨 221
0 Bình luận
Sắp xếp theo