【发布时间】:2017-10-09 11:49:01
【问题描述】:
我想向主玩家的方向发射子弹,在这个类中,子弹朝着玩家的方向:
class bala(pygame.sprite.Sprite):
def __init__(self, img, posX, posY, velproyectil, xmax, ymax):
pygame.sprite.Sprite.__init__(self)
self.Bala = img
self.Bala = pygame.transform.rotate(self.Bala, 90)
self.rect = self.Bala.get_rect()
self.speedx = velproyectil
self.speedy = velproyectil
self.rect.top = posY - ymax
self.rect.left = posX - xmax
def direccion(self, personaje, personajex, personajey):
dx, dy = self.rect.x - personajex, self.rect.y - personajey
dist = hypot(dx, dy)
dx, dy = dx / dist, dy / dist
self.rect.x += dx * -self.speedx
self.rect.y += dy * -self.speedy
def dibujar(self, superficie):
superficie.blit(self.Bala, self.rect)
但是当我移动播放器时,子弹不会继续前进,并且控制台显示错误:
"File "Juego_clases (Prueba2).py", line 99, in direccion dx, dy = dx / dist, dy / dist ZeroDivisionError: float division by zero"
按下空格键时会激活子弹,我希望按下空格键时发射的子弹经过相同的方式。 我想要的是向玩家方向射击子弹并且玩家可以躲避它们。
这是正在发生的事情 (gif):https://1drv.ms/i/s!Amz_9onOWtRI3XfQPC4aq_LhuTnj
【问题讨论】:
-
dist必须为零。在进行除法之前,您需要一个 if 语句来确保dist不为 0。 -
但子弹不会继续移动。这是一个“gif”,显示发生了什么。 (1drv.ms/i/s!Amz_9onOWtRI3XfQPC4aq_LhuTnj)
-
在某些时候
self.rext.x必须等于personajex并且self.rect.y必须等于personajey(假设我猜到了hypot(dx, dy)的作用)。这将使dist等于 0。
标签: python python-2.7 pygame