我试图检测十字线与我创造的目标之间的碰撞。
当检测到碰撞时,目标将从其所在的所有精灵组中消失。
如果有人可以向我解释为什么会这样,并且可能会建议解决方案我很欣赏它。谢谢!
class Cross(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = crosshairImage
self.rect = crosshairImage
self.shooting = 0
def update(self):
position = pygame.mouse.get_pos()
self.rect = position
def shoot(self,attack):
if not self.shooting:
self.shooting = 1
return self.rect.colliderect(attack.rect)
def undo(self):
self.shooting = 0
class Target0(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = targetImage
self.rect = targetImage
self.hp = 1
def update(self):
position0 = screen.blit(targetImage, (181.75,204))
self.rect = position0
while running:
milliseconds = clock.tick(FPS)
playtime += milliseconds/1000.0
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
elif event.type == MOUSEBUTTONDOWN:
if cross.shoot(target0):
target0.kill()
elif event.type == MOUSEBUTTONUP:
cross.undo()
allsprites.update()
screen.blit(background, (0,0))
allsprites.draw(screen)
pygame.display.flip()
text = "FPS: {0:.2f} Playtime: {1:.2f}".format(clock.get_fps(), playtime)
pygame.display.set_caption(text)
pygame.display.flip()
答案 0 :(得分:1)
您忘记将get_rect()
值放在矩形上。将self.rect
值更改为这些值,它应该可以正常工作
self.rect = self.image.get_rect()
答案 1 :(得分:0)
Pygasm已经提到你必须将self.rect
属性设置为实际的rect实例而不是表面:self.rect = self.image.get_rect()
(如果需要,也可以更改rect的坐标)。 / p>
AttributeError
的起源位于update
的{{1}}方法中,您将Cross
设置为self.rect
位置,这是一个元组,并且元组没有pygame.mouse.get_pos()
方法,您可以使用colliderect
shoot
方法调用该方法。
相反,你必须更新矩形的{{1}}坐标(或其他一个矩形属性):
Cross