我正在使用Pygame,有一个图片,我可以从中剪切一个矩形:
image = pygame.transform.scale(pygame.image.load('example.png'), (32, 32))
handle_surface = image.copy()
handle_surface.set_clip(pygame.Rect(0, 0, 32, 16))
clipped_image = surface.subsurface(handle_surface.get_clip())
我尝试通过传递Surface
来使用subsurface
:
handle_surface = image.copy()
hole = pygame.Surface((32, 32))
pygame.draw.circle(hole, (255, 255, 255), (0, 0), 32)
handle_surface.set_clip(hole)
image = surface.subsurface(handle_surface.get_clip())
surf = image.copy()
但我得到的错误:
ValueError: invalid rectstyle object
出现此错误是因为subsurface
的名称是Rect
,而不是Surface
。是否有方法从该图像中剪切另一个形状并使collidepoint
正常工作?
1条答案
按热度按时间1mrurvl11#
您不能使用
pygame.Surface.subsurface
,因为 Surface 始终是矩形,不能是圆形。pygame.Rect.collidepoint
检测点是否在矩形区域内,因此也不能帮助您。圆和点之间的碰撞检测可以使用指针和圆心之间的距离来计算。(
dx*dx + dy*dy
)。检查距离的平方是否小于半径的平方。在以下代码中,点的坐标为(px
,py
),并且圆由其中心(cx, cy
)和其半径(radius
)限定。另一种解决方案是PyGame与遮罩的碰撞,
pygame.sprite.collide_circle
也可以帮助解决问题,但你必须为半径为1的点创建一个pygame.sprite.Sprite
对象,这似乎使问题过于复杂。如果要从
pygame.Surface
剪裁圆形区域,请参见:简短说明:
convert_alpha
来实现。pygame.SRCALPHA
)蒙版pygame.draw.ellipse
,因为它更容易设置维度)pygame.BLEND_RGBA_MIN
将圆形蒙版与图像混合。(参见pygame.Surface.blit
)