Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Pygame character movement

I’m practicing with pygame and don’t know how to make my character move. If I put ‘print’ statement, it works, and prints whatever I want when I press ‘a’ for example, but character stays on his place. I know little about classes, so I think that’s the problem

import pygame

pygame.init()
pygame.font.init() 
width, height = 924, 500
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('Priest Beast')
clock = pygame.time.Clock()

BG = pygame.transform.scale2x(pygame.image.load('art/background.png')).convert_alpha()

music = pygame.mixer.Sound('sound/music.mp3')

class Player(pygame.sprite.Sprite):

    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.transform.scale2x(pygame.image.load('art/Player.png')).convert_alpha()
        self.rect = self.image.get_rect(center = (800, 300))
        self.x = x 
        self.y = y

    def move(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_a]:
            self.rect.x += 5

    def update(self):
        self.move()
            

#Loop and exit
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
   
    # Sounds
    music.play()
    music.set_volume(0.1)

    screen.blit(BG, (0, 0))

    player = pygame.sprite.GroupSingle()
    player.add(Player(800,200))

    #Update everything
    player.draw(screen)
    player.update()
    pygame.display.update()
    clock.tick(60)

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

You continuously recreate the object in its initial position. You need to create the Sprite and Group before the application loop:

player = pygame.sprite.GroupSingle() # <-- INSERT
player.add(Player(800,200))

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
   
    # [...]

    screen.blit(BG, (0, 0))

    # DELETE
    # player = pygame.sprite.GroupSingle()
    # player.add(Player(800,200))

    # [...]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading