Не могу переместить объект в пигме - PullRequest
2 голосов
/ 20 марта 2019

Я делаю проект для своего класса Computer Science, где мы используем pygame для перемещения объекта по экрану. Я не использую спрайты pygame, а скорее изображения, импортированные в pygame, и использую их для использования в качестве пользовательских спрайтов. Когда я пытаюсь переместить объект Bunny или «Player» по экрану, он, похоже, обновляет позицию. Это объект Player, я пытаюсь изменить позицию:

class Player(object):
    def __init__(self, x, y, filename):
        self.x = x
        self.y = y
        self.image = pygame.transform.scale(pygame.image.load(filename), (150, 200))
        self.moving_left = False
        self.moving_right = False
        self.moving_up = False
        self.moving_down = False

    def moveUpdate(self):
        if self.moving_left:
            self.x -= 25
            pygame.display.update()
        if self.moving_right:
            self.y += 25
            pygame.display.update()
        if self.moving_up:
            self.y -= 25
            pygame.display.update()
        if self.moving_down:
            self.y += 25
            pygame.display.update()

    def moveEvent(self, event):
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    self.moving_left = True
                if event.key == pygame.K_RIGHT:
                    self.moving_right = True
                if event.key == pygame.K_UP:
                    self.moving_up = True
                if event.key == pygame.K_DOWN:
                    self.moving_down = True
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT:
                    self.moving_left = False
                if event.key == pygame.K_RIGHT:
                    self.moving_right = False
                if event.key == pygame.K_UP:
                    self.moving_up = False
                if event.key == pygame.K_DOWN:
                    self.moving_down = False

    def draw(self, screen):
        screen.blit(self.image, (self.x, self.y))

И этот класс я использую для запуска самой игры:

class Game(object):
    def __init__(self):
        self.screensize = [1000, 1000]
        self.white = [255, 255, 255]
        self.black = [0, 0, 0]
        self.screen = pygame.display.set_mode(self.screensize)
        #self.bunny = pygame.transform.scale(pygame.image.load('bunny.png'), (150, 200))
        self.clock = pygame.time.Clock()
        self.player = Player(500, 500, 'bunny.png')

    def Run(self):
        run = True
        while run:
            self.clock.tick(60)
            self.screen.fill(self.white)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                    pygame.quit()
                    exit()
                elif event.type == pygame.K_ESCAPE:
                    run = False
                    pygame.quit()
                    exit()

                # - Objects Event Handle - 
                self.player.moveEvent(event)
            # - Updates - 
            #self.player.moveUpdate()

            # - Draws - 
            self.player.draw(self.screen)
            pygame.display.flip()

game = Game()
game.Run()

1 Ответ

0 голосов
/ 20 марта 2019

Удалить цикл событий из Player.moveEvent:

class Player(object):

    # [...]

    def moveEvent(self, event):

        # for event in pygame.event.get(): <----- to be removed

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                self.moving_left = True
            if event.key == pygame.K_RIGHT:
                self.moving_right = True
            if event.key == pygame.K_UP:
                self.moving_up = True
            if event.key == pygame.K_DOWN:
                self.moving_down = True
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                self.moving_left = False
            if event.key == pygame.K_RIGHT:
                self.moving_right = False
            if event.key == pygame.K_UP:
                self.moving_up = False
            if event.key == pygame.K_DOWN:
                self.moving_down = False

Обратите внимание, что метод вызывается в цикле событий, и событие передается методу.Метод должен обрабатывать событие входного параметра:

while run:
    self.clock.tick(60)
    self.screen.fill(self.white)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            exit()
        elif event.type == pygame.K_ESCAPE:
            run = False
            pygame.quit()
            exit()
        # - Objects Event Handle - 
        self.player.moveEvent(event)

    # - Updates - 
    self.player.moveUpdate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...