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
我在 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