python - Pygame - 零除法错误:浮点除以零
问题描述
我去了 Stack Overflow 并阅读了一种让敌人跟随玩家的算法。它以前工作过,但现在它抛出一个零除法错误。我理解这是因为 python 除以 0(意味着它们之间的距离为 0)但是,我不明白为什么它在之前抛出该错误,它没有抛出它,即使两者之间的距离为 0。可以有人澄清吗?
import pygame
import math
pygame.init()
width, height = 800, 600
white = (255, 255, 255)
class Enemy(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((40, 50))
self.image.fill(white)
self.rect = self.image.get_rect()
self.rect.x = width / 2
self.rect.y = height/ 2
self.speed = 1
def move_towards_another_object(self):
self.dx = self.rect.x - player.rect.x
self.dy = self.rect.y - player.rect.y
self.dist = math.hypot(self.dx, self.dy)
self.dx = self.dx/self.dist
self.dy = self.dy/self.dist
self.rect.x += self.dx * -self.speed
self.rect.y += self.dy * -self.speed
enemy = Enemy()
class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 40))
self.image.fill(white)
self.rect = self.image.get_rect()
self.rect.x = 0 + self.rect.x
self.rect.y = height - self.rect.height
player = Player()
all_sprites = pygame.sprite.Group()
all_sprites.add(enemy, player)
gameExit = False
while not gameExit:
enemy.move_towards_another_object()
pygame.quit()
quit()
解决方案
在每次迭代中,您的enemy
精灵会朝着 的方向迈出一个单位。player
最终,它与玩家完全重合,并且self.dist
是一个完美的 0。你的坐标是整数,所以不难得到准确的数学。在以前的版本中,坐标是浮动的吗?这可以很容易地解释差异。
推荐阅读
- string - Haskell - 使用递归替换字符串中的子字符串(在我的情况下不允许使用函数 take 和 drop)
- npm-install - 我应该怎么做才能让命令 npm install 工作?
- python - Python 列条目选择
- python - 通过 gRPC 调用 TkInter 时崩溃
- google-drive-api - 获取驱动器 api 中无配额文件的文件大小
- node.js - 如何为 HTTPS 打开我的后端 NodeJS 应用程序?
- testng - 质量保证 | 在 TestNg 监听器中获取场景标签
- node.js - 从 Firestore 数据库读取数据到自制网站
- java - 如何从另一个类访问用户定义的 List<> 值?
- python - 凯撒 Cyper Python