如何在pygame中显示带有可移动透明圆圈的大黑色矩形?

时间:2019-08-07 11:43:33

标签: python python-3.x pygame

这个问题不是很清楚。

从本质上讲,我正在尝试制作一款多人吃豆人游戏,使玩家(当扮演幽灵时)只能看到他们周围一定的半径。我对此的最佳猜测是有一个覆盖整个迷宫的矩形,然后以某种方式切出一个以幽灵的矩形为中心的圆。但是,我不确定如何在pygame中做最后一部分。

我想补充一下,即使在pygame中也有可能,将圆圈像素化而不是平滑圆圈是理想的选择,但这不是必须的。

有什么建议吗?干杯。

2 个答案:

答案 0 :(得分:1)

我能想到的最好的办法就是破解。在pygame外部构建一个图像,该图像主要是黑色的,中间是一个零字母的圆圈,然后将该对象变幻到您的幽灵角色的顶部,只能看到一个圆圈。我希望有更好的方法,但是我不知道那是什么。

答案 1 :(得分:0)

如果只想在圆形区域内显示场景,则可以执行以下操作:

  • 清除显示。

  • 将绘图区域限制为圆形区域周围的正方形区域

  • 绘制场景

  • 在正方形区域的顶部绘制一个透明的圆形表面

可以在运行时轻松创建圆曲面。定义圆形区域(areaRadius)的半径。创建一个圆形区域半径加倍的正方形pygame.Surface。用不透明的黑色填充它,并在中间绘制一个透明的圆圈:

circularArea = pygame.Surface((areaRadius*2, areaRadius*2), pygame.SRCALPHA)
circularArea.fill((0, 0, 0, 255))
pygame.draw.circle(circularArea, (0,0,0,0), (areaRadius, areaRadius), areaRadius)

可以通过.set_clip()限制表面的绘制区域。使用参数None调用该函数将删除剪切区域。以下screen是代表窗口的表面,areaCenter是屏幕上圆形区域的中心:

while run:

    # [...]

    # remove clipping region and clear the entire screen
    screen.set_clip(None)
    screen.fill(0)

    # set the clipping region to square around the circular area
    areaTopleft = (areaCenter[0]-areaRadius, areaCenter[1]-areaRadius)
    clipRect = pygame.Rect(areaTopleft, (areaRadius*2, areaRadius*2))
    screen.set_clip(clipRect)

    # draw the scene
    # [...]

    # draw the transparent circle on top of the rectangular clipping region
    screen.blit(circularArea, areaTopleft)  

    # clear the dripping region and draw all the things which should be visible in any case
    screen.set_clip(None)
    # [...]

    pygame.display.flip()