Pygame: 当我使用 blit 时图像不显示

Pygame: Image not showing up when I use blit

我在 Pygame 开始制作游戏,目前正在为敌方对象编写代码。它应该选择靠近玩家(但不在玩家身上)的随机位置,然后向该位置移动。我有四个图像供敌人循环播放,如果敌人在随机时间过去之前到达该位置,我想留在原地并停止循环播放其动画。相反,我希望它停留在第一张图片上。

在我的 class Enemy 中,有一个函数 main 在游戏循环期间被调用以更新它在屏幕上的位置。这是函数中的代码:

def main(self, display):
    if self.animation_count + 1 >= 16:
        self.animation_count = 0
    
    self.animation_count += 1
    
    if self.reset_offset == 0:
        self.offset_x = randrange(-150, 150)
        self.offset_y = randrange(-150, 150)
        self.reset_offset = randrange(120, 150)
    else:
        self.reset_offset -= 1
        
    if player.y + self.offset_y > self.y - display_scroll[1]:
        self.y += 1
    elif player.y + self.offset_x < self.x-display_scroll[1]:
        self.y -= 1
        
    if player.x + self.offset_x > self.x - display_scroll[0]:
        self.x += 1
        if player.y + self.offset_y == self.y - display_scroll[1] and player.x + self.offset_y == self.x - display_scroll[0]:
            display.blit(pygame.transform.scale(self.animation_images[0], (32, 42)),
                         (self.x - display_scroll[0], self.y - display_scroll[1]))
        else:
            display.blit(pygame.transform.scale(self.animation_images[self.animation_count // 4], (32, 42)),
                     (self.x - display_scroll[0], self.y - display_scroll[1]))
    elif player.x + self.offset_x < self.x-display_scroll[0]:
        self.x -= 1
        if player.y + self.offset_y == self.y - display_scroll[1] and player.x + self.offset_y == self.x - display_scroll[0]:
            display.blit(pygame.transform.scale(self.animation_images[0], (32, 42)),
                         (self.x - display_scroll[0], self.y - display_scroll[1]))
        else:
            display.blit(pygame.transform.scale(pygame.transform.flip(
                self.animation_images[self.animation_count // 4], True, False),
                (32, 42)), (self.x - display_scroll[0], self.y - display_scroll[1]))

当我运行它时,敌人在它的时间结束前到达它的位置,它反而消失了。有谁知道是什么导致了这个错误?

此外,display_scroll 是我用来绘制所有其他对象的列表。玩家保持在同一个位置,而其他一切都在移动。 display_scroll[0] 是 x 值,display_scroll[1] 是 y 值。

此外,我在函数末尾添加了行 print(self.x - display_scroll[0], self.y - display_scroll[1]) 只是为了查看 python 试图绘制字符的位置。它总是打印出正常值,没有任何异常。

答案很简单:

您正在查看

if player.x + self.offset_x > self.x - display_scroll[0]:
    [show the image]
elif player.x + self.offset_x < self.x-display_scroll[0]:
    [show the image]

所以如果敌人在玩家的右边或者在玩家的左边,它就会被绘制出来。但如果它与玩家在同一 x 坐标上,则不会被绘制。
为了实现这一点,您需要为此添加一个 else 语句:

else:
    display.blit(pygame.transform.scale(self.animation_images[0], (32, 42)),
    (self.x - display_scroll[0], self.y - display_scroll[1]))
    # or whatever animation you want to play