精灵和遮罩的Add_internal Attribute Error



我正在尝试制作Towerdefense游戏为了检查敌人是否在塔的命中圈内,我想使用函数pygame.sprite.collide_mask来了解他们是否在接触。

这是输出:AttributeError:"pygame.mask.mask"对象没有属性"add_internal">

我怎样才能让它工作?我在游戏中检测碰撞的方向是否正确?

我希望这个代码可以像一样工作

import pygame
pygame.init()

class Tower(pygame.sprite.Sprite):
def __init__(self, window):
self.collision_circle = 

pygame.image.load('assets/Towers&Projectiles/Collision_Circle/collision_circle.png')
self.tower_mask = pygame.mask.from_surface(self.collision_circle)

class Enemy(pygame.sprite.Sprite):
def __init__(self, window):
self.enemy_mask_image = pygame.image.load('Assets/Enemy/WALK_000.png')
self.enemy_mask = pygame.mask.from_surface(self.enemy_mask_image)

pygame.display.set_caption("Tower Defense")
width = 1200
height = 840
display_surface = pygame.display.set_mode((width, height))
my_enemy = Enemy(display_surface)
my_tower = Tower(display_surface)
while True:
enemy_sprite = pygame.sprite.GroupSingle(my_enemy.enemy_mask)
tower_sprite = pygame.sprite.GroupSingle(my_tower.tower_mask)
if pygame.sprite.spritecollide(enemy_sprite.sprite,tower_sprite,False,pygame.sprite.collide_mask()):
print("collision")

collide_mask使用Spirate.rect.mask对象。因此,Mask属性的名称必须是mask,而不是tower_maskenemy_mask
此外,对象必须具有名为rect的属性,该属性是具有精灵位置的pygame.Rect对象
此外,super调用类构造函数中缺少的。例如:

class TowerCircle(pygame.sprite.Sprite):
def __init__(self, centerx, centery):
super().__init__()
self.image = pygame.image.load('assets/Towers&Projectiles/Collision_Circle/collision_circle.png')
self.mask = pygame.mask.from_surface(self.collision_circle)
self.rect = self.image.get_rect(center = (centerx, centery))
class Enemy(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = pygame.image.load('Assets/Enemy/WALK_000.png')
self.mask = pygame.mask.from_surface(self.enemy_mask_image)
self.rect = self.image.get_rect(topleft = (x, y))

请参见Pygame遮罩碰撞和在Pygame中将一条线作为具有自身碰撞的精灵。

最新更新