How to move Sprite in Pygame

前端 未结 1 1656
慢半拍i
慢半拍i 2020-12-19 10:46

im trying to get my image (bird) to move up and down on the screen but i cant figure out how to do it here is what i tried im sure its way off but im trying to figure it out

相关标签:
1条回答
  • 2020-12-19 11:19

    As stated by ecline6, bird is the least of your worries at this point.

    Consider reading this book..

    For now, First let's clean up your code...

    import pygame
    import os
    
    # let's address the class a little later..
    
    pygame.init()
    screen = pygame.display.set_mode((640, 400))
    # you only need to call the following once,so pull them out of the  while loop.
    bird = pygame.image.load(os.path.join('C:\Python27', 'player.png'))
    clock = pygame.time.Clock()
    
    running = True
    while running:
        event = pygame.event.poll()
        if event.type == pygame.QUIT:
            running = False
    
        screen.fill((255, 255, 255)) # fill the screen
        screen.blit(bird, (0, 0))    # then blit the bird
    
        pygame.display.update() # Just do one thing, update/flip.
    
        clock.tick(40) # This call will regulate your FPS (to be 40 or less)
    

    Now the reason that your "bird" is not moving is:
    When you blit the image, ie: screen.blit(bird, (0, 0)),
    The (0,0) is constant, so it won't move.

    Here's the final code, with the output you want (try it) and read the comments:

    import pygame
    import os
    
    # it is better to have an extra variable, than an extremely long line.
    img_path = os.path.join('C:\Python27', 'player.png')
    
    class Bird(object):  # represents the bird, not the game
        def __init__(self):
            """ The constructor of the class """
            self.image = pygame.image.load(img_path)
            # the bird's position
            self.x = 0
            self.y = 0
    
        def handle_keys(self):
            """ Handles Keys """
            key = pygame.key.get_pressed()
            dist = 1 # distance moved in 1 frame, try changing it to 5
            if key[pygame.K_DOWN]: # down key
                self.y += dist # move down
            elif key[pygame.K_UP]: # up key
                self.y -= dist # move up
            if key[pygame.K_RIGHT]: # right key
                self.x += dist # move right
            elif key[pygame.K_LEFT]: # left key
                self.x -= dist # move left
    
        def draw(self, surface):
            """ Draw on surface """
            # blit yourself at your current position
            surface.blit(self.image, (self.x, self.y))
    
    
    pygame.init()
    screen = pygame.display.set_mode((640, 400))
    
    bird = Bird() # create an instance
    clock = pygame.time.Clock()
    
    running = True
    while running:
        # handle every event since the last frame.
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit() # quit the screen
                running = False
    
        bird.handle_keys() # handle the keys
    
        screen.fill((255,255,255)) # fill the screen with white
        bird.draw(screen) # draw the bird to the screen
        pygame.display.update() # update the screen
    
        clock.tick(40)
    
    0 讨论(0)
提交回复
热议问题