Python Pygame-制作精灵“;“步行”;朝着正确的方向
我正在使用pygame继续我的工作。我现在在敌方班工作。基本上,它会从一边走到另一边。我可以让它在设定的边界之间行走,但我无法让图像显示敌人面对的正确方向。如果有人能帮我或给我一些建议,我将非常感激。多谢各位 我认为我的问题是update()函数 这是我的敌人班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 =
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速度来更改动画。我没有收到任何错误。精灵“行走”,但从面向左/右随机切换。