这个问题不是很清楚。
从本质上讲,我正在尝试制作一款多人吃豆人游戏,使玩家(当扮演幽灵时)只能看到他们周围一定的半径。我对此的最佳猜测是有一个覆盖整个迷宫的矩形,然后以某种方式切出一个以幽灵的矩形为中心的圆。但是,我不确定如何在pygame中做最后一部分。
我想补充一下,即使在pygame中也有可能,将圆圈像素化而不是平滑圆圈是理想的选择,但这不是必须的。
有什么建议吗?干杯。
答案 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()