2015-05-14 47 views
0

我正在繼續我的工作,使用pygame。我目前正在研究敵人的課程。基本上,它會從一邊走到另一邊。我可以讓它在設定的邊界之間行走,但我無法讓圖像顯示敵人面對的正確方向。如果任何人都可以請幫助我或給我一些建議,我真的很感激它。謝謝。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] 
+0

您是否收到錯誤?你應該更多地告訴你實際得到的行爲。它看起來像是在精靈跨越邊界時試圖改變動畫,當你應該根據精靈的x速度改變它時。 – ballsatballsdotballs

+0

我沒有收到任何錯誤。精靈「走」,但隨機左右切換。 – user655321

回答

2

它看起來像你只更新幀當敵人改變方向(即當它擊中邊界的一個)。但是,即使精靈沒有碰到邊界,幀也應基於當前位置和方向更新每幀:

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]