问题描述
我需要创建一个具有边界圆的曲面。在该表面上绘制的任何内容在该边界圆之外都不应该可见。我已经尝试过使用遮罩,地下,srcalpha等,但似乎无济于事。
我的尝试:
w = ss.get_width ()
h = ss.get_height ()
TRANSPARENT = (255,255,0)
OPAQUE = ( 0,225)
crop = pygame.Surface ((w,h),pygame.SRCALPHA,ss)
crop.fill (TRANSPARENT)
c = round (w / 2),round (h / 2)
r = 1
pygame.gfxdraw. aacircle (crop,*c,r,OPAQUE)
pygame.gfxdraw.filled_circle (crop,OPAQUE)
ss = crop.subsurface (crop.get_rect ())
App.set_subsurface (self,ss)
稍后...
self.ss.fill (BLACK)
self.ss.blit (self.background,ORIGIN)
背景是正方形图像。应该将其裁剪为圆形并在屏幕上呈现
基于Rabbid76的注释的解决方案:
def draw_scene (self,temp=None):
if temp is None: temp = self.ss
# 1. Draw everything on a surface with the same size as the window (background and scene).
size = temp.get_size ()
temp = pygame.Surface (size)
self.draw_cropped_scene (temp)
# 2. create the surface with the white circle.
self.cropped_background = pygame.Surface (size,pygame.SRCALPHA)
self.crop ()
# 3. blit the former surface on the white circle.
self.cropped_background.blit (temp,ORIGIN,special_flags=pygame.BLEND_RGBA_MIN)
# 4. blit the whole thing on the window.
self.ss.blit (self.cropped_background,ORIGIN)
def draw_cropped_scene (self,temp): App.draw_scene (self,temp)
crop()的示例实现为:
def crop (self):
o,bounds = self.bounds
bounds = tr (bounds) # round elements of tuple
pygame.gfxdraw. aaellipse (self.cropped_background,*bounds,OPAQUE)
pygame.gfxdraw.filled_ellipse (self.cropped_background,OPAQUE)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)