【问题标题】:Pygame: Image not showing up when I use blitPygame:使用 blit 时图像未显示
【发布时间】:2021-10-17 18:30:14
【问题描述】:

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

在我的班级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 试图在哪里绘制字符。它总是打印出正常值,没有什么异常。

【问题讨论】:

  • 您能否提供更多关于变量display_scroll的详细信息
  • 可能值得检查self.x-display_scroll[0]self.y-display_scroll[1] 的值,如果它们是负数或大于显示宽度/高度,则不会显示你的敌人。

标签: python pygame


【解决方案1】:

答案很简单:

你正在检查

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

【讨论】:

  • 谢谢!我添加了一个 else 子句并更改了一些内容,现在它按预期工作了!敌人也经常在不应该的情况下冻结,但这很好,因为它适用于我的游戏。
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 2015-12-23
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多