(在pygame 1.9.6/Python3.8.6中)可以通过方法移动角色吗?

(在pygame 1.9.6/Python3.8.6中)可以通过方法移动角色吗?,python,methods,pygame,Python,Methods,Pygame,因此,我目前正在开发一个简单的游戏,到目前为止,它只有一个游戏循环和一个用于创建玩家的类。我想保持我的游戏循环干净,所以我决定将用于移动角色的代码放入“move”方法中是一个好主意,该方法在绘制玩家之前在游戏循环结束时调用。目前,当我运行代码时,我的角色只是坐在原地,如果我发垃圾邮件的话,有时会向左/向右移动,但这看起来很随机。这是全部代码,方法调用是否不正确/每个勾号?我希望你们能帮助我 import pygame pygame.init() screen = pygame.display

因此,我目前正在开发一个简单的游戏,到目前为止,它只有一个游戏循环和一个用于创建玩家的类。我想保持我的游戏循环干净,所以我决定将用于移动角色的代码放入“move”方法中是一个好主意,该方法在绘制玩家之前在游戏循环结束时调用。目前,当我运行代码时,我的角色只是坐在原地,如果我发垃圾邮件的话,有时会向左/向右移动,但这看起来很随机。这是全部代码,方法调用是否不正确/每个勾号?我希望你们能帮助我

import pygame

pygame.init()

screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)
screenWidth, screenHeight = pygame.display.get_surface().get_size()
fpsclock = pygame.time.Clock()

def screen_refresh():
    screen.fill((0, 0, 0))
    player.move()
    player.draw()
    pygame.display.update()
    fpsclock.tick(60)

class player:

    def __init__(self, vel):
        self.img = pygame.image.load('player.png')
        #self.walk = [pygame.image.load('player_1.png'), pygame.image.load('player_2.png')]
        self.width, self.height = self.img.get_size()       
        self.x = (screenWidth - self.width) * 0.5
        self.y = screenHeight - self.height

        self.vel = vel

        self.xchange = 0

    def move(self):

        for event in pygame.event.get():

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_d:
                    self.xchange += self.vel
                if event.key == pygame.K_a:
                    self.xchange -= self.vel

            if event.type == pygame.KEYUP:
                if event.key == pygame.K_d:
                    self.xchange -= self.vel
                if event.key == pygame.K_a:
                    self.xchange += self.vel

        self.x += self.xchange

        if self.x < 0:
            self.x = 0

        elif self.x > (screenWidth - self.width):
            self.x = screenWidth - self.width

    def draw(self):

        screen.blit(self.img, (self.x, self.y))

player = player(5)

running = True
while running:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            running = False

    screen_refresh()
self.vel=vel 其他变量vel在哪里 我还想建议先画出玩家,然后移动它。

self.vel=vel 其他变量vel在哪里
我还建议先画播放器,然后移动它。

您的代码不起作用,因为您有多个调用。pygame.event.get获取所有事件消息并将其从队列中删除。因此,只有一个循环将接收事件,而另一个循环什么也得不到。这导致事件似乎被错过

在主应用程序循环中获取一次事件列表,并将该列表传递给处理它们的函数和方法:

def屏幕刷新事件:事件:事件列表 screen.fill0,0,0 player.moveevents将事件传递给player.move 打平 pygame.display.update fpscall.tick60 职业球员: [...] def moveself,事件:事件:事件列表 对于事件中的事件: [...] 运行=真 运行时: events=pygame.event.get事件列表 对于事件中的事件: 如果event.type==pygame.QUIT: 运行=错误 screen\u refresh事件将事件传递到screen\u refresh
您的代码不起作用,因为您有多个对的调用。pygame.event.get获取所有事件消息并将其从队列中删除。因此,只有一个循环将接收事件,而另一个循环什么也得不到。这导致事件似乎被错过

在主应用程序循环中获取一次事件列表,并将该列表传递给处理它们的函数和方法:

def屏幕刷新事件:事件:事件列表 screen.fill0,0,0 player.moveevents将事件传递给player.move 打平 pygame.display.update fpscall.tick60 职业球员: [...] def moveself,事件:事件:事件列表 对于事件中的事件: [...] 运行=真 运行时: events=pygame.event.get事件列表 对于事件中的事件: 如果event.type==pygame.QUIT: 运行=错误 screen\u refresh事件将事件传递到screen\u refresh