/ / Cách triển khai hình nền cuộn trong Pygame

Cách triển khai hình nền cuộn trong Pygame

Hình nền cuộn có thể nâng cao đáng kể sức hấp dẫn trực quan và chiều sâu của trò chơi. Chúng có thể tạo ảo giác về chuyển động, mang lại cho trò chơi cảm giác sống động và đắm chìm. Bạn có thể triển khai hình nền cuộn chỉ bằng một vài bước đơn giản bằng Pygame.


Pygame là một thư viện Python phổ biến mà bạn có thể sử dụng để phát triển trò chơi. Việc thêm hình nền cuộn vào các dự án Pygame của bạn sẽ khiến chúng trở nên sống động và mang lại trải nghiệm hấp dẫn hơn cho người chơi.


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

Để hiểu khái niệm cuộn hình nền trong Pygame, hãy bắt đầu bằng cách tạo một trò chơi đơn giản trong đó người chơi có thể di chuyển sang trái và phải. Bạn cũng có thể bao gồm hai nền tảng, được biểu thị bằng hình chữ nhật, để dùng làm môi trường trò chơi. Tạo một tệp mới có tên đơn giản-game.py.

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.

Đầu tiên, nhập mô-đun pygame và khởi tạo nó. Sau đó, xác định vị trí bắt đầu và tốc độ di chuyển của người chơi. Tạo nền tảng bằng cách sử dụng pygame.Rect các đối tượng và xác định vị trí và kích thước của chúng.

Trong vòng lặp trò chơi, hãy xử lý các sự kiện như thoát khỏi trò chơi. Bạn cũng có thể xử lý chuyển động của người chơi dựa trên đầu vào cảm ứng hoặc bàn phím.

Đây là đầu ra của trò chơi đơn giản:

cuộn trò chơi đơn giản với người chơi và đối tượng nền tảng

Tạo các lớp khác nhau

Để đạt được hiệu ứng cuộn, bạn có thể tạo nhiều lớp nền với các màu khác nhau. Mỗi lớp sẽ di chuyển với một tốc độ khác nhau, tạo ra hiệu ứng thị sai. Hiệu ứng này tạo ảo giác về chiều sâu và nâng cao cảm giác chuyển động trong trò chơi.

Xác định hai lớp nền, mỗi lớp bao phủ toàn bộ cửa sổ trò chơi, sử dụng các đối tượng pygame.Rect. Đồng thời xác định màu sắc của từng lớp trong nền_màu danh sách. Các nền_tốc độ list xác định tốc độ mà mỗi lớp sẽ di chuyển.

 

background_layers = [
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height)
]

background_colors = [(30, 30, 30), (60, 60, 60)]
background_speeds = [0.1, 1.0]

Để tạo hiệu ứng nền cuộn, bạn cần cập nhật vị trí của các lớp nền trong vòng lặp trò chơi. Bạn sẽ di chuyển từng lớp theo chiều ngang dựa trên tốc độ được chỉ định của nó.

Tạo một tệp mới có tên cuộn-bg.py và thêm mã với các bản cập nhật bên dưới:

 for i in range(len(background_layers)):
    background_layers[i].x -= background_speeds[i]

    if background_layers[i].x <= -screen_width:
        background_layers[i].x = 0

    pygame.draw.rect(screen, background_colors[i], background_layers[i])

Lặp lại qua từng lớp nền. Trừ tốc độ tương ứng khỏi tọa độ x của lớp, khiến nó di chuyển sang trái. Nếu một lớp chạm đến cạnh trái của màn hình, hãy đặt lại vị trí của nó sang bên phải, tạo hiệu ứng cuộn liên tục.

Cuối cùng, vẽ từng lớp nền hình chữ nhật trên màn hình bằng cách sử dụng pygame.draw.rect() và chuyển màu và đối tượng pygame.Rect tương ứng.

trò chơi với trình phát, nền tảng và cuộn bg

Thêm hiệu ứng thị sai khi di chuyển

Để nâng cao hiệu ứng thị sai, bạn có thể sửa đổi chuyển động của nền tảng để xảy ra khi người chơi đang di chuyển. Điều này sẽ tạo ra cảm giác mạnh mẽ về chiều sâu và chuyển động năng động. Tạo một tệp mới có tên thị sai.py và thêm mã với các bản cập nhật bên dưới:

 
rect1 = pygame.Rect(50, screen_height - 100, 200, 10)
rect2 = pygame.Rect(screen_width - 250, screen_height - 200, 200, 10)

platforms = [
    {"rect": rect1, "speed": 3},
    {"rect": rect2, "speed": 1}
]


keys = pygame.key.get_pressed()

if keys[pygame.K_LEFT] and player_x > 0:
    player_x -= player_speed

    for platform in platforms:
        platform["rect"].x -= platform["speed"]

if keys[pygame.K_RIGHT] and player_x < screen_width:
    player_x += player_speed

    for platform in platforms:
        platform["rect"].x += platform["speed"]

for platform in platforms:
    pygame.draw.rect(screen, (0, 255, 0), platform["rect"])

Biểu diễn các nền tảng dưới dạng từ điển chứa cả đối tượng hình chữ nhật (rect) và tốc độ mà nền tảng sẽ di chuyển (tốc độ). Các nền tảng cập nhật trong vòng lặp trò chơi dựa trên chuyển động của người chơi.

Bằng cách thực hiện sửa đổi này, hiệu ứng cuộn sẽ chỉ hoạt động khi người chơi chủ động di chuyển, tăng cường hơn nữa ảo giác về chiều sâu và chuyển động.

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

Bạn có thể triển khai một số tính năng bổ sung để cải thiện hình nền cuộn trong trò chơi của mình. Dưới đây là một số ví dụ.

Ngẫu nhiên màu nền

Để thêm biến thể cho các lớp nền, bạn có thể chọn màu ngẫu nhiên của chúng. Bạn có thể làm điều này bằng cách sửa đổi nền_màu danh sách:

 import random

background_colors = [
    (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
    (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
    (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
]

Thêm nhiều lớp nền

Bạn có thể thử nghiệm thêm nhiều lớp nền để tạo hiệu ứng thị sai phong phú hơn. Đơn giản chỉ cần xác định bổ sung pygame.Rect đối tượng, màu sắc và tốc độ:

 

background_layers = [
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height),
    pygame.Rect(0, 0, screen_width, screen_height)
]

background_colors = [
    (30, 30, 30),
    (60, 60, 60),
    (90, 90, 90),
    (120, 120, 120)
]

background_speeds = [1, 2, 3, 4]

Sử dụng hình ảnh cho hình nền

Thay vì các màu đồng nhất, bạn có thể sử dụng các tệp hình ảnh làm nền. Pygame cung cấp các chức năng để tải và hiển thị hình ảnh.

Tải các tập tin hình ảnh nền_0.png, nền_1.pngnền_2.png sử dụng pygame.image.load(). Sử dụng phương thức convert() để cải thiện hiệu suất và chia tỷ lệ hình ảnh cho phù hợp với kích thước màn hình với pygame.transform.scale().

 

background_images = [
    pygame.image.load("background_0.png").convert(),
    pygame.image.load("background_1.png").convert(),
    pygame.image.load("background_2.png").convert()
]

background_speeds = [1, 2, 3]

for i in range(len(background_images)):
    size = (screen_width, screen_height)
    background_images[i] = pygame.transform.scale(background_images[i], size)

Cuối cùng, cập nhật vòng lặp nơi bạn vẽ các lớp nền để sử dụng hình ảnh:

 

for i in range(len(background_layers)):
    background_layers[i].x -= background_speeds[i]

    if background_layers[i].x <= -screen_width:
        background_layers[i].x = 0

    screen.blit(background_images[i], background_layers[i])

Dưới đây là một số phương pháp hay nhất cần cân nhắc khi triển khai hình nền cuộn trong các dự án Pygame của bạn.

Tối ưu hóa hiệu suất

Nền cuộn liên quan đến hiển thị và cập nhật liên tục. Để đảm bảo chơi trò chơi mượt mà, hãy cân nhắc việc tối ưu hóa mã của bạn và giảm thiểu các phép tính không cần thiết.

Thử nghiệm với tốc độ lớp

Điều chỉnh tốc độ của các lớp nền có thể tạo ra các hiệu ứng khác nhau. Chơi xung quanh với các giá trị khác nhau để tìm sự cân bằng phù hợp và đạt được tác động trực quan mong muốn.

Thử nghiệm trên các kích thước màn hình khác nhau

Đảm bảo rằng hình nền cuộn của bạn hoạt động tốt trên các độ phân giải màn hình khác nhau. Cân nhắc triển khai chia tỷ lệ động hoặc sử dụng các hình nền khác nhau cho các tỷ lệ khung hình khác nhau.

Sử dụng định dạng hình ảnh phù hợp

Nếu bạn quyết định sử dụng hình ảnh cho nền của mình, hãy chọn định dạng hình ảnh phù hợp (ví dụ: PNG, JPEG) để cân bằng kích thước tệp và chất lượng hình ảnh. Bạn cũng có thể giảm thời gian tải bằng cách nén và tối ưu hóa hình ảnh của mình.

Xem xét việc sử dụng bộ nhớ

Nếu bạn dự định sử dụng nhiều hình ảnh có độ phân giải cao cho hình nền của mình, hãy lưu ý đến các yêu cầu về bộ nhớ. Hình ảnh lớn có thể tiêu tốn một lượng bộ nhớ đáng kể, có khả năng ảnh hưởng đến hiệu suất và khả năng phản hồi của trò chơi của bạn.

Bằng cách kết hợp các hình nền cuộn, bạn có thể tạo các môi trường khác nhau, chẳng hạn như phong cảnh chuyển động, cảnh quan thành phố trong tương lai hoặc thế giới dưới nước. Hiệu ứng thị sai tạo thêm cảm giác động, làm cho thế giới trò chơi trở nên sống động và có tính tương tác.

Hãy nhớ thử nghiệm, lặp lại và khám phá các khả năng sáng tạo với hình nền cuộn để làm cho trò chơi của bạn trở nên thú vị và hấp dẫn hơn đối với người chơi.

Similar Posts

Leave a Reply

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