【发布时间】:2021-08-31 11:44:31
【问题描述】:
我正在制作一个坦克游戏,你可以向其他坦克发射子弹。但是当你的子弹击中敌人时,我会收到这样的错误:
Traceback (most recent call last):
File "...", line 182, in <module>
if pygame.sprite.spritecollide(i, enemy_group, True):
File "...\pygame\sprite.py", line 1645, in spritecollide
default_sprite_collide_func = sprite.rect.colliderect
AttributeError: 'Bullet' object has no attribute 'rect'
这是我的代码中的问题,还是 pygame 中的问题?
这是子弹类:(顺便说一下,它重载了弹丸类)
class Bullet(Projectile):
def __init__(self, *, screen, image):
Projectile.__init__(self)
self._screen = screen
self._x = tank.get("x") + 90
self._y = tank.get("y") - 7
self._image = pygame.image.load(image)
self._rect = self._image.get_rect()
def update(self, speed):
if self._x >= 800 or self._x <= 0:
self.kill()
self._x += speed
self._rect.center = (self._x, self._y)
def blit_on_screen(self):
self._screen.blit(self._image, self._rect)
(弹丸类只是一个抽象方法等待被子弹类重载的类。)
而且,这里是敌人类:
class Enemy(pygame.sprite.Sprite):
def __init__(self, *, screen, x, y):
pygame.sprite.Sprite.__init__(self)
self._screen = screen
self._x = x
self._y = y
self._image = pygame.image.load("assets/Tank.png")
self._image = pygame.transform.flip(self._image, True, False)
self._image = pygame.transform.scale(self._image, (490, 280))
self._rect = self._image.get_rect()
def update(self, speed):
if self._x <= 0 or self._x >= 800:
self.kill()
self._x -= speed
self._rect.center = (self._x, self._y)
def blit_on_screen(self):
self._screen.blit(self._image, self._rect)
这是检查碰撞的子弹和敌人的部分:
for i in bullet_group:
if pygame.sprite.spritecollide(i, enemy_group, True):
logging.info("bullet and enemy collided")
这里发生了什么?
【问题讨论】:
-
请提供minimal reproducible example,而不是您的整个程序。 Stack Overflow 不是免费的代码调试服务(因为您可以确定问题出在您的代码上)。
标签: python pygame attributes attributeerror python-3.8