Python 为什么';我的精灵在pygame中不能正确移动吗?

Python 为什么';我的精灵在pygame中不能正确移动吗?,python,pygame,Python,Pygame,我的第二个游戏是平板游戏。我画了所有的口水,画了背景和平台,但我不能一次移动超过45像素的角色,即使它应该移动5像素。我还从这里和那里复制了一些代码,所以我不能只搜索它。这很令人费解,请帮忙。 代码如下: import sys import pygame screen = pygame.display.set_mode((1300, 700), pygame.RESIZABLE) global bg bg = pygame.image.load('Pictures/badground.png'

我的第二个游戏是平板游戏。我画了所有的口水,画了背景和平台,但我不能一次移动超过45像素的角色,即使它应该移动5像素。我还从这里和那里复制了一些代码,所以我不能只搜索它。这很令人费解,请帮忙。 代码如下:

import sys
import pygame

screen = pygame.display.set_mode((1300, 700), pygame.RESIZABLE)
global bg
bg = pygame.image.load('Pictures/badground.png')
w = (0, 0, 0)
screen.fill(w)
screen.blit(bg, (0, 0))
level = 0
walking_l = (pygame.image.load('Pictures/walk_l.png'))
walking_r = (pygame.image.load('Pictures/walk_r.png'))
walking_l_2 = (pygame.image.load('Pictures/_stand.png'))
walking_r_2 = (pygame.image.load('Pictures/stand.png'))
stand = (pygame.image.load('Pictures/rstand.png'))
pf = (pygame.image.load('Pictures/platform.png'))
pygame.display.set_caption('Platformed')


class player(object):
    def __init__(self, speed, width, height):
        self.speed = speed
        self.x = 650
        self.y = 350
        self.width = width
        self.height = height
        self.walk_l = False
        self.walk_r = False
        self.stand = True
        self.jump = False
        self.walk_count = 0

    def reprint_win(self):
        screen.fill(w)
        screen.blit(bg, (0, 0))

    def walk(self):
        k = pygame.key.get_pressed()
        if k[pygame.K_a]:
            self.x -= self.speed
            self.stand = False
            self.walk_l = True
            self.walk_r = False
            self.jump = False
            print(self.x)
            screen.fill(w)
            screen.blit(bg, (0, 0))
        elif k[pygame.K_d]:
            self.x += self.speed
            self.stand = False
            self.walk_r = True
            self.walk_l = False
            self.jump = False
            print(self.y)
            screen.fill(w)
            screen.blit(bg, (0, 0))
        elif k[pygame.K_w] and self.walk_r and not self.jump:
            self.stand = False
            self.walk_r = True
            self.walk_l = False
            self.jump = True
            screen.fill(w)
            screen.blit(bg, (0, 0))
        else:
            self.stand = True
            self.walk_r = False
            self.walk_l = False
            self.jump = False
            screen.fill(w)
            screen.blit(bg, (0, 0))


while True:
    for e in pygame.event.get():
        man = player(5, 64, 64)
        if e.type == pygame.QUIT:
            sys.exit()
        if e.type == pygame.KEYDOWN:
            man.walk()
            screen.blit(stand, (man.x, man.y))
            pygame.display.update()
        elif e.type == pygame.KEYDOWN:
            man.walk()
            screen.blit(stand, (man.x, man.y))
            pygame.display.update()
player
的方法
walk()
添加一个方法
draw
,该方法根据实例属性绘制播放器:

class播放器(对象):
# [...]
def步行(自我):
self.stand,self.walk\u l,self.walk\r,self.jump=False,False,False,False
k=pygame.key.get_pressed()
如果k[pygame.k_a]:
self.x-=自速度
self.walk\u l=真
elif k[pygame.k_d]:
self.x+=自速度
self.walk\u r=True
elif k[pygame.k_w]和self.walk_r和not self.jump:
self.jump=True
其他:
self.stand=True
def绘图(自我、冲浪):
如果self.walk\l:
冲浪(步行(self.x,self.y))
elif self.walk\r:
冲浪板(步行(self.x,self.y))
其他:
冲浪板(站立,(self.x,self.y))
必须在每一帧中绘制整个场景。对应用程序循环而不是事件循环进行绘图。
此外,必须在应用程序循环之前创建
palyer
的实例,并在每个帧中调用
man.mvoe()

用于控制每秒帧数:

man=player(5,64,64)
clock=pygame.time.clock()
FPS=60
尽管如此:
时钟滴答声(FPS)
对于pygame.event.get()中的e:
如果e.type==pygame.QUIT:
sys.exit()
走
屏幕光点(背景,(0,0))
人.画(屏幕)
pygame.display.update()
player
的方法
walk()
会更改实例属性,但id不会绘制任何内容。
添加一个方法
draw
,该方法根据实例属性绘制播放器:

class播放器(对象):
# [...]
def步行(自我):
self.stand,self.walk\u l,self.walk\r,self.jump=False,False,False,False
k=pygame.key.get_pressed()
如果k[pygame.k_a]:
self.x-=自速度
self.walk\u l=真
elif k[pygame.k_d]:
self.x+=自速度
self.walk\u r=True
elif k[pygame.k_w]和self.walk_r和not self.jump:
self.jump=True
其他:
self.stand=True
def绘图(自我、冲浪):
如果self.walk\l:
冲浪(步行(self.x,self.y))
elif self.walk\r:
冲浪板(步行(self.x,self.y))
其他:
冲浪板(站立,(self.x,self.y))
必须在每一帧中绘制整个场景。对应用程序循环而不是事件循环进行绘图。
此外,必须在应用程序循环之前创建
palyer
的实例,并在每个帧中调用
man.mvoe()

用于控制每秒帧数:

man=player(5,64,64)
clock=pygame.time.clock()
FPS=60
尽管如此:
时钟滴答声(FPS)
对于pygame.event.get()中的e:
如果e.type==pygame.QUIT:
sys.exit()
走
屏幕光点(背景,(0,0))
人.画(屏幕)
pygame.display.update()

它有点工作了,但是每当它停止移动并重新开始时,精灵会一直重置它的位置。当它停止移动并重新开始时,精灵会一直重置它的位置