Как переместить фоновое изображение с ключами в Pygame? - PullRequest
1 голос
/ 05 апреля 2020

Я делаю игру в пигме. В этой игре фоновое изображение большое. На экране игрок видит только около 1/20 фонового изображения. Я хочу, чтобы, когда игрок нажимал клавиши со стрелками влево, вправо, вверх или вниз, фоновое изображение перемещалось соответственно, но оно перестало двигаться, когда игрок достигал конца изображения. Я понятия не имею, как это сделать.

Мой код до этого момента: -

import pygame

FPS = 60
screen = pygame.display.set_mode((1000, 1000))
bg = pygame.image.load('map.png')

clock = pygame.time.Clock()

while True:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

Заранее спасибо: -

1 Ответ

2 голосов
/ 05 апреля 2020

Получить область фона и экрана с помощью get_size():

screen_size = screen.get_size()
bg_size = bg.get_size()

Определить начальное начало фона в диапазоне [0, bg_size[0]-screen_size[0]]. например, центр фона:

bg_x = (bg_size[0]-screen_size[0]) // 2

Получить список состояний клавиш по pygame.key.get_pressed():

keys = pygame.key.get_pressed()

Изменить bg_x в зависимости от состояния влево и вправо :

if keys[pygame.K_LEFT]:
    bg_x -= 10
if keys[pygame.K_RIGHT]:
    bg_x += 10

Зажим bg_x в диапазоне [0, bg_size[0]-screen_size[0]]:

 bg_x = max(0, min(bg_size[0]-screen_size[0], bg_x))

blit фона на -bg_x на экране:

screen.blit(bg, (-bg_x, 0))

См. Пример:

import pygame

FPS = 60
screen = pygame.display.set_mode((1000, 1000))
bg = pygame.image.load('map.png')

screen_size = screen.get_size()
bg_size = bg.get_size()
bg_x = (bg_size[0]-screen_size[0]) // 2
bg_y = (bg_size[1]-screen_size[1]) // 2

clock = pygame.time.Clock()

while True:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        bg_x -= 10
    if keys[pygame.K_RIGHT]:
        bg_x += 10
    if keys[pygame.K_UP]:
        bg_y -= 10
    if keys[pygame.K_DOWN]:
        bg_y += 10
    bg_x = max(0, min(bg_size[0]-screen_size[0], bg_x)) 
    bg_y = max(0, min(bg_size[1]-screen_size[1], bg_y))

    screen.blit(bg, (-bg_x, -bg_y))
    pygame.display.flip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...