Python 当移动特定数量的像素时,更改字符的图像

Python 当移动特定数量的像素时,更改字符的图像,python,pygame,Python,Pygame,我正在用pygame做游戏。每当角色移动一定数量的像素时,我想改变它的图像,使它看起来像是在走路,但我真的不明白怎么做。代码如下: 导入pygame 导入时间 黑色=(0,0,0) 白色=(255,255,255) 红色=(255,0,0) 灰色=(129129129) 帧=0 类精灵表(对象): 定义初始化(自我,文件名): self.sprite\u sheet=pygame.image.load(文件名).convert() def get_图像(自身、x、y、宽度、高度、颜色): ima

我正在用pygame做游戏。每当角色移动一定数量的像素时,我想改变它的图像,使它看起来像是在走路,但我真的不明白怎么做。代码如下:

导入pygame
导入时间
黑色=(0,0,0)
白色=(255,255,255)
红色=(255,0,0)
灰色=(129129129)
帧=0
类精灵表(对象):
定义初始化(自我,文件名):
self.sprite\u sheet=pygame.image.load(文件名).convert()
def get_图像(自身、x、y、宽度、高度、颜色):
image=pygame.Surface([width,height]).convert()
图像。设置颜色键(颜色)
blit(self.sprite_表,(0,0),(x,y,宽度,高度))
返回图像
职业炸弹(pygame.sprite.sprite):
改变x=0
改变y=0
定义初始化(自):
super()。\uuuu init\uuuuu()
sprite_sheet=SpriteSheet(“Untitled.png”)
self.image=sprite\u sheet.get\u image(2,2,48,48,白色)
self.rect=self.image.get_rect()
def移动(自身,y):
自校正y+=y
如果self.rect.y==400:
self.kill()
班级士兵(pygame.sprite.sprite):
定义初始化(自):
self.change_x=0
self.change_y=0
self.direction=“R”
super()。\uuuu init\uuuuu()
self.walking_frames_l=[]
self.walking\u frames\u r=[]
sprite_sheet=SpriteSheet(“Picture2.png”)
self.image=sprite\u sheet.get\u image(0,0,150,205,灰色)
self.walking\u frames\u l.append(self.image)
self.image=sprite\u sheet.get\u image(233,0,140,210,灰色)
self.walking\u frames\u l.append(self.image)
self.image=sprite\u sheet.get\u image(425,5123210,灰色)
self.walking\u frames\u l.append(self.image)
self.image=sprite\u sheet.get\u image(0,0,150,205,灰色)
self.image=pygame.transform.flip(self.image,True,False)
self.walking\u frames\u r.append(self.image)
self.image=sprite\u sheet.get\u image(233,0,140,210,灰色)
self.image=pygame.transform.flip(self.image,True,False)
self.walking\u frames\u r.append(self.image)
self.image=sprite\u sheet.get\u image(425,5123210,灰色)
self.image=pygame.transform.flip(self.image,True,False)
self.walking\u frames\u r.append(self.image)
self.image=self.walking\u frames\u r[0]
self.rect=self.image.get_rect()
自校正y=297
自校正x=100
def移动(自我):
self.rect.x+=self.change\u x
def步行(自我):
全局框架
如果self.change_x>0:
帧+=1
时间。睡眠(.1)
如果帧==3:
帧=0
self.image=self.walking\u frames\u r[frames]
def go_左(自):
self.change_x=-6
def向右(自):
自我改变x=6
def停止(自):
self.change_x=0
self.image=self.walking\u frames\u r[2]
pygame.init()
屏幕宽度=1000
屏幕高度=500
screen=pygame.display.set_模式([屏幕宽度,屏幕高度])
pygame.display.set_标题(“游戏”)
clock=pygame.time.clock()
完成=错误
炸弹
士兵
all_sprites=pygame.sprite.Group()
所有精灵。添加(炸弹)
所有精灵。添加(士兵)
虽然没有这样做:
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
完成=正确
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
士兵。向左走()
如果event.key==pygame.K_RIGHT:
士兵,向右走
如果event.type==pygame.KEYUP:
如果event.key==pygame.K_左且soldier.change_x<0:
士兵,停下
如果event.key==pygame.K_RIGHT和soldier.change_x>0:
士兵,停下
屏幕填充(红色)
所有精灵。绘制(屏幕)
炸弹,行动(2)
士兵,行动
士兵行走
时钟滴答(60)
pygame.display.flip()
pygame.quit()
我还尝试在特定时间后更改图像(此部分):

当我添加time.sleep(.1)并尝试移动角色时,它会以某种方式影响炸弹。它移动2个像素,等待.1秒,然后再次移动2个像素

是否有任何方法可以执行上述任一操作(在特定时间后或在经过特定像素数后更改图像)


请帮忙。谢谢

frame
必须是
Soldier
类的属性。此外,您还需要一个
属性
来显示播放器移动的像素数:

职业士兵(pygame.sprite.sprite):
定义初始化(自):
# [...]
self.frame=0
self.moved=0
将绝对移动添加到
self.moved
。当移动超过一定数量的像素时(
pixel\u用于一步
):

职业士兵(pygame.sprite.sprite):
# [...]
def步行(自我):
self.moved+=abs(self.change_x)
像素为一步=60
如果self.moved>pixels\u用于一个步骤:
self.moved-=一步的像素数
self.frame+=1
如果self.frame>=len(self.walking\u frames\r):
self.frame=0
self.image=self.walking\u frames\r[self.frames]

完整示例:

导入pygame
黑色=(0,0,0)
白色=(255,255,255)
红色=(255,0,0)
灰色=(129129129)
类精灵表(对象):
定义初始化(自我,文件名):
self.sprite\u sheet=pygame.image.load(文件名).convert()
def get_图像(自身、x、y、宽度、高度、颜色):
image=pygame.Surface([width,height]).convert()
图像。设置颜色键(颜色)
blit(self.sprite_表,(0,0),(x,y,宽度,高度))
返回图像
职业炸弹(pygame.sprite.sprite):
改变x=0
改变y=0
定义i
    def walk(self):
        global frame
        if self.change_x > 0:
            frame +=1
            time.sleep(.1)
        if frame == 3:
            frame = 0
        self.image = self.walking_frames_r[frame]