使用Pygame Mask生成对象轮廓时坐标不匹配的问题
如何让Pygame Mask轮廓坐标直接对应对象全局位置
Pygame的pygame.mask.from_surface().outline()方法返回的是图像自身的局部坐标,默认不会关联对象的实际位置self.pos,所以必须手动将局部坐标偏移到全局坐标系中。虽然没有原生方法直接跳过这个步骤,但可以用更简洁的写法替代你原本的遍历代码:
优化后的坐标转换代码
# 正确分离mask对象与轮廓列表(原代码将outline结果存为self.mask会混淆mask对象和坐标列表) self.pos = (random.randint(10, WIDTH - 50), random.randint(10, HEIGHT - 50)) img_mask = pygame.mask.from_surface(self.img) local_outline = img_mask.outline() # 一行代码生成全局坐标的轮廓点 self.global_outline = [(x + self.pos[0], y + self.pos[1]) for x, y in local_outline]
说明
- Pygame的
outline()方法本身没有提供偏移参数,因此无法完全省去坐标偏移的步骤,但列表推导式比手动循环遍历更简洁高效,可读性也更强。 - 注意不要将
outline()返回的坐标列表直接赋值给self.mask(原代码中的问题),应该将mask对象和轮廓坐标列表分开存储,避免混淆。
内容的提问来源于stack exchange,提问作者user19022072
相关产品推荐
相关产品推荐

