спрайт не будет двигаться влево или вправо в Pygame - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь переместить спрайт (называемый игроком) влево или вправо, нажимая клавиши со стрелками. Движение вправо или влево будет выполнено путем изменения центра прямоугольника спрайта. Как вы могли бы видеть, я пытаюсь добавить / вычесть 8 из координат х спрайта, чтобы переместить его вправо или влево. Однако спрайт не двигается, когда я нажимаю клавишу со стрелкой. Как я могу это исправить?

import pygame
import random
import time
import pygame as pg


# set the width and height of the window
width = 800
height = 370
groundThickness = 30
pheight = 50
pwidth = 50
playerx = 0+pwidth
playery = height-groundThickness-pheight/2
fps = 30
# define colors
white = (255, 255, 255)
black = (0, 0, 0)
red = (5, 35, 231)
# initialize pygame 
pygame.init()

# initialize pygame sounds
pygame.mixer.init()
# create window
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("my game")
clock = pygame.time.Clock()

class Player(pygame.sprite.Sprite):
        def __init__(self):
            pygame.sprite.Sprite.__init__(self)
            self.image = pygame.Surface((pwidth, pheight))
            self.image.fill(red)
            self.rect = self.image.get_rect()
            self.rect.center = (playerx, playery)

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

# Game loop
running = True
x_change = 0
while running:
    # keep loop running at the right speed
    clock.tick(fps)
    # Process input (events)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                print("left")
                x_change = -8
            elif event.key == pygame.K_RIGHT:
                print("right")
                x_change = 8
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0
        print(x_change)
        playerx += x_change
        all_sprites.update()



    #ground
    pygame.draw.rect(screen, (0,255,0), ((0, height-groundThickness), (width, groundThickness)))



    # Update
    all_sprites.update()



    # Draw / render
    all_sprites.draw(screen)
    pygame.display.update()
    # AFTER drawing everything, flip the display
    pygame.display.flip()

pygame.quit()

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Заполнение экрана цветом фона или изображения также необходимо для обновления экрана с текущей позицией движущегося спрайта. Следующая команда будет добавлена ​​вверху раздела рисования / рендеринга игрового цикла:

screen.fill(black)
0 голосов
/ 27 июня 2018

Вы никогда не меняли положение спрайта player. Как вы ожидаете, что это будет двигаться? Все, что вы сделали, это изменили значение вашей локальной переменной playerx, но вы никогда не возвращали это изменение обратно в объект спрайта.

Начните с добавления средней строки ниже:

    playerx += x_change
    player.rect.center = (playerx, playery)
    all_sprites.update()

Видите, как это меняет вещи? Вы можете взять это оттуда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...