Pygame - 在正确的方向上制作 Sprite "walk"
Pygame - Making a Sprite "walk" in the right direction
我正在使用 pygame 继续我的工作。我目前正在研究敌人 class。基本上,它会从一侧走到另一侧。我可以让它在设定的边界之间行走,但我无法让图像显示敌人面对的正确方向。如果有人可以帮助我或给我一些建议,我将不胜感激。谢谢。
我认为我的问题是 update() 函数。
这是我的敌人Class
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]
看起来你只是在敌人改变方向时(即当它撞到边界之一时)才更新帧。然而,即使精灵没有到达边界,帧也应该根据当前位置和方向更新每一帧:
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]
我正在使用 pygame 继续我的工作。我目前正在研究敌人 class。基本上,它会从一侧走到另一侧。我可以让它在设定的边界之间行走,但我无法让图像显示敌人面对的正确方向。如果有人可以帮助我或给我一些建议,我将不胜感激。谢谢。
我认为我的问题是 update() 函数。
这是我的敌人Class
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]
看起来你只是在敌人改变方向时(即当它撞到边界之一时)才更新帧。然而,即使精灵没有到达边界,帧也应该根据当前位置和方向更新每一帧:
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]