在将运动控制移动到一个玩家类后,我无法移动我的精灵

时间:2018-02-17 14:47:19

标签: python class pygame

我似乎无法让我的精灵在将它移到课堂后向左或向右移动。我正在使用pygame。我有一个速度变量,并添加到我的x为我的形状,但它仍然没有移动。任何帮助将非常感激。在我决定把所有与玩家有关的事情都放到课堂上之前,运动正在运转。

www.foobar.com/test

`

2 个答案:

答案 0 :(得分:1)

问题是pygame.event.get()清除了事件队列中的所有事件,因此当您的玩家调用它时,所有事件都已消失。来自docs

  

这将获取所有消息并将其从队列中删除。如果给出了类型或类型的序列,则只会从队列中删除这些消息。

您可以通过指定应从事件队列中删除哪些事件来解决此问题,例如

for event in pygame.event.get(QUIT):
    GameQuit = True

其他事件仍应在队列中供玩家使用

答案 1 :(得分:1)

Leon Z.已经解释过pygame.event.get()清空了事件队列。我通常将事件从事件循环传递给需要事件的对象。您还可以将pygame.event.get()返回的列表分配给变量,然后将此变量传递给播放器实例:events = pygame.event.get()

顺便说一句,move方法有一点错误:= +而不是+=

import pygame
from pygame.locals import *
pygame.init()

pygame.display.set_caption("Platformer")
window = pygame.display.set_mode((640, 480))
clock = pygame.time.Clock()
all_sprite_list = pygame.sprite.Group()

class player:

    def __init__(self,velocity):
        self.velocity = velocity

    def location(self,x,y):
        self.x = x
        self.y = y 
        self.xVel = 0

    def keys(self, event):
        """Handle the events that get passed from the event loop."""
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                self.xVel = -self.velocity
            elif event.key == pygame.K_RIGHT:
                self.xVel =  self.velocity
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                self.xVel = 0

    def move(self):
        self.x += self.xVel  # Add the self.xVel to self.x.

    def draw(self):
        display = pygame.display.get_surface()
        pygame.draw.rect(display, (255,255,255), [self.x, self.y, 20, 40])

    def do(self):
        self.move()
        self.draw()

P = player(10)
P.location(window.get_width()/2, 0)

def draw_map():
    window.fill(pygame.Color('blue'))

def draw_player():
    player = Player(50,50)

    all_sprite_list.add(player)

def game_loop():
    GameQuit = False
    while not GameQuit:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                GameQuit = True
            # Pass the event to all objects that need it.
            P.keys(event)

        draw_map()
        P.do()
        pygame.display.update()
        clock.tick(30)


game_loop()
pygame.quit()