Python Pygame-制作精灵“;“步行”;朝着正确的方向

Python Pygame-制作精灵“;“步行”;朝着正确的方向,python,pygame,sprite,Python,Pygame,Sprite,我正在使用pygame继续我的工作。我现在在敌方班工作。基本上,它会从一边走到另一边。我可以让它在设定的边界之间行走,但我无法让图像显示敌人面对的正确方向。如果有人能帮我或给我一些建议,我将非常感激。多谢各位 我认为我的问题是update()函数 这是我的敌人班 class Enemies(pygame.sprite.Sprite): enemy_moving_frames_r = [] enemy_moving_frames_l = [] change_x =

我正在使用pygame继续我的工作。我现在在敌方班工作。基本上,它会从一边走到另一边。我可以让它在设定的边界之间行走,但我无法让图像显示敌人面对的正确方向。如果有人能帮我或给我一些建议,我将非常感激。多谢各位

我认为我的问题是update()函数

这是我的敌人班

class Enemies(pygame.sprite.Sprite):
     enemy_moving_frames_r = []
     enemy_moving_frames_l = []

     change_x = 0
     change_y = 0

     boundary_top = 0
     boundary_bottom = 0
     boundary_left = 0
     boundary_right = 0

     level = None
     player = None
def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    sprite_sheet = SpriteSheet("stuff/skeleton_7.png")

    image = sprite_sheet.get_image(7, 7, 28, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(37, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(70, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(107, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)
    image = sprite_sheet.get_image(142, 7, 33, 64)
    self.enemy_moving_frames_r.append(image)


    image = sprite_sheet.get_image(7, 7, 28, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(37, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(70, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(107, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)
    image = sprite_sheet.get_image(142, 7, 33, 64)
    image = pygame.transform.flip(image, True, False)
    self.enemy_moving_frames_l.append(image)


    self.image = self.enemy_moving_frames_r[0]
    self.rect = self.image.get_rect()



def update(self):
    # Move left/right
    self.rect.x += self.change_x

    cur_pos = self.rect.x - self.level.world_shift

    print(cur_pos)

    if cur_pos < self.boundary_left:
        self.change_x *= -1
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_r)
        self.image = self.enemy_moving_frames_r[frame]
    elif cur_pos > self.boundary_right:
        self.change_x *= -1
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_l)
        self.image = self.enemy_moving_frames_l[frame]  
类敌人(pygame.sprite.sprite):
敌方移动帧\u r=[]
敌方移动帧
改变x=0
改变y=0
边界_top=0
边界_底部=0
边界_左=0
右边界=0
级别=无
玩家=无
定义初始化(自):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
sprite_sheet=SpriteSheet(“stuff/skeleton_7.png”)
图片=精灵图片。获取图片(7,7,28,64)
自身敌人移动帧追加(图片)
图片=精灵图片。获取图片(37,7,33,64)
自身敌人移动帧追加(图片)
图片=精灵图片。获取图片(70,7,33,64)
自身敌人移动帧追加(图片)
图片=精灵图片。获取图片(107,7,33,64)
自身敌人移动帧追加(图片)
图片=精灵图片。获取图片(142,7,33,64)
自身敌人移动帧追加(图片)
图片=精灵图片。获取图片(7,7,28,64)
image=pygame.transform.flip(image,True,False)
自身敌人移动帧附加(图像)
图片=精灵图片。获取图片(37,7,33,64)
image=pygame.transform.flip(image,True,False)
自身敌人移动帧附加(图像)
图片=精灵图片。获取图片(70,7,33,64)
image=pygame.transform.flip(image,True,False)
自身敌人移动帧附加(图像)
图片=精灵图片。获取图片(107,7,33,64)
image=pygame.transform.flip(image,True,False)
自身敌人移动帧附加(图像)
图片=精灵图片。获取图片(142,7,33,64)
image=pygame.transform.flip(image,True,False)
自身敌人移动帧附加(图像)
self.image=self.敌军\u移动\u帧\u r[0]
self.rect=self.image.get_rect()
def更新(自我):
#向左/向右移动
self.rect.x+=self.change\u x
cur\u pos=self.rect.x-self.level.world\u shift
打印(当前位置)
如果cur_posself.boundary_right:
self.change_x*=-1
帧=(self.rect.x//30)%len(self.敌军移动帧)
self.image=self.敌军移动帧

看起来您只是在敌人改变方向时(即,当它击中一个边界时)才更新帧。但是,即使精灵未触及边界,帧也应根据当前位置和方向更新每帧:

def update(self):
    # Move left/right
    self.rect.x += self.change_x

    cur_pos = self.rect.x - self.level.world_shift

    print(cur_pos)

    # test against boundaries:
    if cur_pos < self.boundary_left or cur_pos > self.boundary_right:
        self.change_x *= -1

    # set animation frame:
    if self.change_x > 0:
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_r)
        self.image = self.enemy_moving_frames_r[frame]
    elif self.change_x < 0:
        frame = (self.rect.x // 30) % len(self.enemy_moving_frames_l)
        self.image = self.enemy_moving_frames_l[frame]  
def更新(自):
#向左/向右移动
self.rect.x+=self.change\u x
cur\u pos=self.rect.x-self.level.world\u shift
打印(当前位置)
#边界测试:
如果cur\u posself.boundary\u right:
self.change_x*=-1
#设置动画帧:
如果self.change_x>0:
帧=(self.rect.x//30)%len(self.敌军移动帧)
self.image=self.敌军\u移动\u帧\u r[frame]
elif self.change_x<0:
帧=(self.rect.x//30)%len(self.敌军移动帧)
self.image=self.敌军移动帧

您是否遇到错误?你应该告诉更多关于你实际得到的行为。当精灵跨越边界时,您似乎正在尝试更改动画,而您应该根据精灵的x速度来更改动画。我没有收到任何错误。精灵“行走”,但从面向左/右随机切换。