我想做一个可以发射子弹的球员。为此,我尝试定义一个shoot
在按下空格键时调用的函数。该函数如下所示(p是播放器对象btw):
class bullet:
def __init__(self):
self.x = None
self.y = None
self.radius = 10
self.shooting = False
self.speed = 5
def shoot(self):
self.shooting = True
if self.shooting == True:
self.x = (p.x + 60)
self.y = (p.y + 25)
self.x += self.speed
self.y += self.speed
pygame.draw.circle(d, (0, 0, 0), (self.x, self.y), self.radius)
shoot()
我希望该函数可以继续调用自身,而子弹可以继续前进。但是实际发生的是我按空格键时出现错误
shoot()
NameError: name 'shoot' is not defined
我如何调用该函数:
while True:
d.fill((98, 98, 98))
p.draw()
for event in pygame.event.get():
pass
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
b.shoot()
我观察到的一件事是,如果我shoot()
在shoot()
函数末尾删除了递归,它将运行,但是只要按住空格,子弹就会停留在相同的位置(正如递归被删除一样)。我该如何解决这个问题?谢谢
shoot
是不是一个功能,严格地说。这是一个实例方法,必须从一个bullet
对象中调用。您需要使用
self.shoot()
递归。
但是,这是使子弹移动的不良方法。这是一个循环工作。当您以较小版本的问题调用例程时,最好使用递归。这只是一个延续。
while self.shooting == True:
self.x = (p.x + 60)
self.y = (p.y + 25)
self.x += self.speed
self.y += self.speed
pygame.draw.circle(d, (0, 0, 0), (self.x, self.y), self.radius)
这就提出了一个问题,您打算如何停止移动子弹头。你需要类似的东西
self.shooting = (self.x <= x_limit) and \
(self.y <= y_limit)
其中x / y_limit是该移动方向的上限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句