Заставить изображение двигаться в 4 направлениях в Pygame - PullRequest
0 голосов
/ 01 апреля 2020

Изо всех сил пытаюсь заставить мое изображение «ковбоя» двигаться по экрану во всех 4 направлениях. Ничего не происходит, когда я нажимаю клавиши. Помоги пожалуйста. Это основано на вопросах упражнения в Python Cra sh Course.

import pygame
pygame.init()


screen = pygame.display.set_mode((500,500))
pygame.display.set_caption("Move the Cowboy")


cowboy = pygame.image.load('images/cowboy.bmp')
cowboy = pygame.transform.scale(cowboy, (50, 50))


run = True

while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    screen.fill((240,237,207))

    cowboy_rect = cowboy.get_rect()

    screen_rect = screen.get_rect()
    screen_center = screen_rect.center

    cowboy_rect.center = screen_rect.center
    cowboy_rect.x = cowboy_rect.width
    cowboy_rect.y = cowboy_rect.height

    cowboy_x = float(cowboy_rect.x)
    cowboy_y = float(cowboy_rect.y)


    screen.blit(cowboy, screen_center) 


    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        cowboy_x -= 5
    elif keys[pygame.K_RIGHT]:
        cowboy_x += 5
    elif keys[pygame.K_UP]:
        cowboy_y -= 5
    elif keys[pygame.K_DOWN]:
        cowboy_y += 5

    pygame.display.update()    

pygame.quit ()

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Вы помещаете изображение в центр экрана с помощью screen.blit(cowboy, screen_center). Измените screen_center на cowboy_rect, так как при этом сохраняется положение изображения.

Также извлеките cowboy_rect = cowboy.get_rect() из l oop, так как оно сбрасывает его обратно в 0.

Затем вы помещаете позицию cowboy_rect в центр экрана, выполняя команду cowboy_rect.center = screen_rect.center, убираете ее из l oop, чтобы это происходило только один раз, а не в каждом кадре. Затем его значение меняется на 50,50 с помощью cowboy_rect.x = cowboy_rect.width и cowboy_rect.y = cowboy_rect.height, так что уберите его.

Затем с помощью клавиш измените значение cowboy_x -= 5 на cowboy_rect.x -= 5 и сделайте то же самое для остальных.

0 голосов
/ 01 апреля 2020

Подставляя это: screen.blit(cowboy, screen_center), вы говорите, что это изображение появится в центре экрана. Вы хотите, чтобы он отображался на (cowboy_x, cowboy_y), так как это переменные позиционирования, которые вы определили. Вот рабочая версия вашего кода:

import pygame
pygame.init()


screen = pygame.display.set_mode((500,500))
pygame.display.set_caption("Move the Cowboy")


cowboy = pygame.image.load('images/cowboy.bmp')
cowboy = pygame.transform.scale(cowboy, (50, 50))

cowboy_x, cowboy_y = 0, 0

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    screen.fill((240,237,207))

    screen.blit(cowboy, (cowboy_x, cowboy_y)) 


    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        cowboy_x -= 1
    elif keys[pygame.K_RIGHT]:
        cowboy_x += 1
    elif keys[pygame.K_UP]:
        cowboy_y -= 1
    elif keys[pygame.K_DOWN]:
        cowboy_y += 1

    pygame.display.update()    
pygame.quit()

Я позволил себе вычеркнуть некоторые совершенно бесполезные строки кода и принести то, что вам не нужно было повторять. l oop, чтобы сэкономить место обработки.

...