Thêm Camera cuộn vào Trò chơi PyGame của bạn

scrolling camera in pygame

Một tính năng phổ biến mà bạn sẽ tìm thấy trong nhiều trò chơi là camera cuộn theo bạn khi bạn di chuyển trong thế giới trò chơi. Hiệu ứng này có thể thêm chiều sâu và tính hiện thực cho trò chơi của bạn, đồng thời cải thiện trải nghiệm chơi trò chơi tổng thể.


Có nhiều cách khác nhau để triển khai camera cuộn trong PyGame, vì vậy hãy đảm bảo rằng bạn hiểu sự khác biệt của chúng.


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 mô-đun PyGame:

 pip install pygame 

Giờ đây, bạn có thể tạo một trò chơi đơn giản với hình chữ nhật dành 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ạn có thể tìm thấy mã hoàn chỉnh cho dự án trong repo GitHub này.

Bắt đầu bằng cách nhập mô-đun pygame. Sau đó, khởi tạo nó và tạo cửa sổ trò chơi bằng cách sử dụng pygame.display.set_mode() chức năng. Sau đó, đặt chú thích của 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 trình phát và nền tảng tĩnh. Xác định kích thước của trình phát 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 trò chơi xử lý các sự kiện và cập nhật màn hình. Trong vòng lặp, hãy kiểm tra các sự kiện như thoát khỏi trò chơi hoặc di chuyển trình phát bằng các phím mũi tên.

 while True:
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
    
    screen.fill(BACKGROUND_COLOR)


    
    pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1)
    pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2)


    
    player_rect = pygame.Rect(player_x, player_y, PLAYER_WIDTH,
        PLAYER_HEIGHT)


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


    
    pygame.display.update()


    
    clock.tick(30)

Thiết lập máy ảnh

Bây giờ bạn đã có một trò chơi đơn giản với hình chữ nhật dành cho người chơi và hai nền tảng tĩnh, bạn có thể bắt đầu thao tác trên máy ảnh. Trong PyGame, máy ảnh về cơ bản chỉ là một phần bù hoạt động trên tất cả các đối tượng bạn vẽ trên 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.

Để thiết lập máy ảnh, trước 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 camera_offset_x và khởi tạo nó thành 0.

 
camera_offset_x = 0

Tiếp theo, cập nhật vị trí của tất cả cá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 camera_offset_x giá trị đến 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:

 
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ể cập nhật vị trí của các nền tảng tĩnh như sau:

 
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 máy ảnh bằng đầu vào bàn phím

Bây giờ bạn đã thiết lập máy ảnh, bạn có thể bắt đầu di chuyển máy ảnh xung quanh. Một cách để làm điều này là di chuyển máy ảnh để đáp ứng với đầu vào 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 trái.

Để thực hiện việc này, hãy thêm đoạn mã sau vào vòng lặp sự kiện xử lý đầu vào bàn 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

Một cách khác là thay đổi tọa độ x của trình phát trên bàn phím, sau đó cập nhật độ lệch của camera. Bạn có thể thực hiện điều này như vậy:

 
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 đó, bạn có thể cập nhật độ lệch camera đối với tọa độ x của trình phát như sau:

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

Di chuyển máy ảnh bằng đầu vào chuột

Một cách khác để di chuyển máy ảnh là sử 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 nhấp và kéo chuột.

Để làm điều này, hãy theo dõi vị trí của chuột khi người chơi nhấn nút chuột trái. Khi họ di chuyển chuột, hãy cập nhật 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.

 
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

Thêm các tính năng khác của máy ảnh

Bên cạnh hiệu ứng camera cuộn, bạn có thể thêm một số tính năng khác liên quan đến camera để nâng cao trải nghiệm chơi trò chơi. Một tính năng như vậy là hiệu ứng máy ảnh phóng to cho phép người chơi phóng to hoặc thu nhỏ thế giới trò chơi. Bạn có thể đạt được hiệu ứng này bằng cách thay đổi kích thước của cửa sổ trò chơi và thu nhỏ các đối tượng được vẽ trên màn hình.

Để thực hiện việc này, hãy xác định biến thu phóng sẽ lưu mức thu phóng hiện tại của trò chơi. Đặt giá trị ban đầu của nó thành 1.0, nghĩa là không thu phóng. Sau đó, xác định một hàm sẽ tính toán kích thước được chia tỷ lệ của một đối tượng dựa trên mức thu phóng hiện tại.

 zoom = 1.0
def get_scaled_size(size):
    return int(size * zoom)

Tiếp theo, cập nhật vị trí và kích thước của các đối tượng được vẽ trên màn hình bằng cách sử dụng get_scaled_size chức năng. Ví dụ: bạn có thể cập nhật vị trí và kích thước của người chơi như sau:

 player_rect = pygame.Rect(
    get_scaled_size(player_x + camera_offset_x),
    get_scaled_size(player_y),
    get_scaled_size(PLAYER_WIDTH),
    get_scaled_size(PLAYER_HEIGHT)
)

Tương tự, cập nhật vị trí và kích thước của các nền tảng tĩnh như sau:

 rectangle_1_draw_pos = pygame.Rect(
    get_scaled_size(rectangle_1.x + camera_offset_x),
    get_scaled_size(rectangle_1.y),
    get_scaled_size(rectangle_1.width),
    get_scaled_size(rectangle_1.height)
)
pygame.draw.rect(screen, RECTANGLE_COLOR_1, rectangle_1_draw_pos)


rectangle_2_draw_pos = pygame.Rect(
    get_scaled_size(rectangle_2.x + camera_offset_x),
    get_scaled_size(rectangle_2.y),
    get_scaled_size(rectangle_2.width),
    get_scaled_size(rectangle_2.height)
)


pygame.draw.rect(screen, RECTANGLE_COLOR_2, rectangle_2_draw_pos)

Tăng hoặc giảm mức thu phóng 0,1 khi người chơi nhấn nút = hoặc chìa khóa, tương ứng. Đặt kích thước mới của cửa sổ trò chơi dựa trên mức thu phóng hiện tại. Để thực hiện việc này, hãy thêm đoạn mã sau vào vòng lặp sự kiện xử lý đầu vào bàn phím:

 if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_EQUALS:
        zoom += 0.1
        screen = pygame.display.set_mode((
            int(WINDOW_WIDTH * zoom),
            int(WINDOW_HEIGHT * zoom)
        ))
    elif event.key == pygame.K_MINUS:
        zoom -= 0.1


        if zoom < 0.1:
            zoom = 0.1


        screen = pygame.display.set_mode((
            int(WINDOW_WIDTH * zoom),
            int(WINDOW_HEIGHT * zoom)
        ))

Với đoạn mã trên, bạn đã thêm thành công hiệu ứng máy ảnh phóng to vào trò chơi PyGame của chúng tôi. Bằng cách kết hợp tính năng này với hiệu ứng camera cuộn, bạn có thể tạo trải nghiệm trò chơi năng động và hấp dẫn.

Cải thiện lối chơi với các chuyển động của máy ảnh

Việc thêm camera cuộn vào trò chơi PyGame không chỉ nâng cao trải nghiệm hình ảnh mà còn cải thiện lối chơi. Nó cho phép người chơi quan sát nhiều hơn về thế giới trò chơi, giúp họ hiểu rõ hơn về môi trường xung quanh và giúp điều hướng dễ dàng hơn.

Bạn cũng có thể sử dụng chuyển động của máy ảnh để tạo các hiệu ứng đặc biệt như phóng to và thu nhỏ hoặc lắc màn hình để mô phỏng các vụ nổ hoặc động đất.

Previous Post
Next Post

post written by: