当我使用以下命令时,碰撞有效:
pygame.sprite.collide_rect
但当我使用:
pygame.sprite.collide_mask
这是我的两门课:
class Ball():
def __init__(self):
self.rect = balltexture.get_rect()
self.rect.x=225
self.rect.y=400
self.radius = 100
self.velx=0
self.vely=0
self.action=False
self.switchx=0
self.switchy=0
pygame.sprite.Sprite.__init__(self)
self.mask = pygame.mask.from_surface(balltexture)
def draw(self):
win.blit(balltexture, self.rect)
class rock():
def __init__(self, y):
self.rect = rocktexture.get_rect()
self.rect.x = screensize.current_w
self.rect.y = y
self.width = 120
pygame.sprite.Sprite.__init__(self)
self.mask = pygame.mask.from_surface(rocktexture)
def draw(self, win):
win.blit(rocktexture, self.rect)
这是碰撞检查
for i in rocks:
if pygame.sprite.collide_rect(i, Player):
print(1)
if pygame.sprite.collide_mask(i, Player):
print(2)
所以当它们相撞时,它总是打印1。你知道吗
顺便说一句,我移动矩形坐标(例如。播放器.rect.x)来移动播放器/岩石,我也尝试了遮罩重叠的方法,但也不起作用
offset = (Player.rect.x-i.rect.x, Player.rect.y-i.rect.y)
if i.mask.overlap(Player.mask, offset):
print(2)
我的一张照片没有透明度,这就是问题所在
不太清楚发生了什么,但这里有一些东西可以尝试:
您可以使用自掩模填充(). 此时,遮罩碰撞应与基于矩形的碰撞相同。你知道吗
你可以叫print(self.mask.count计数()),它将显示设置的像素数。确保不是0或者别的什么。你知道吗
你可以打电话给我。重叠遮罩(玩家面具(0,0)),并确认当它们具有相同的左上角时重叠。你知道吗
这要么是创建遮罩的问题,要么偏移在某种程度上是错误的;这应该缩小问题的范围。你知道吗
相关问题 更多 >
编程相关推荐