【发布时间】: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]的值,如果它们是负数或大于显示宽度/高度,则不会显示你的敌人。