Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在pygame中只填充窗口的某些圆形部分?_Python_Pygame_Fill_Clip - Fatal编程技术网

Python 如何在pygame中只填充窗口的某些圆形部分?

Python 如何在pygame中只填充窗口的某些圆形部分?,python,pygame,fill,clip,Python,Pygame,Fill,Clip,对于这一点,如果你熟悉的话,想想《超级马里奥制造者2》中boo关卡中的黑暗模式。我试图在角色周围创建一个圆形聚光灯,使圆圈范围内的任何东西都可见,例如站在地板上的部分、敌人或场景中的任何其他东西。我的计划是先画圆圈/聚光灯,然后是场景,然后是角色。然后,我希望聚光灯没有突出显示的任何东西都被遮住 所以我的问题是: 除了圆圈内的内容外,有人知道如何填充整个屏幕吗?我建议一种解决方案,它将剪切区域和绘制一个黑色矩形与中心的圆形透明区域相结合 定义半径并创建半径为两倍的正方形 半径=50 覆盖面积=p

对于这一点,如果你熟悉的话,想想《超级马里奥制造者2》中boo关卡中的黑暗模式。我试图在角色周围创建一个圆形聚光灯,使圆圈范围内的任何东西都可见,例如站在地板上的部分、敌人或场景中的任何其他东西。我的计划是先画圆圈/聚光灯,然后是场景,然后是角色。然后,我希望聚光灯没有突出显示的任何东西都被遮住

所以我的问题是:


除了圆圈内的内容外,有人知道如何填充整个屏幕吗?

我建议一种解决方案,它将剪切区域和绘制一个黑色矩形与中心的圆形透明区域相结合

定义半径并创建半径为两倍的正方形

半径=50 覆盖面积=pygame.表面半径*2,半径*2 设置标识透明颜色的白色关键点,并在曲面上绘制白色透明圆:

cover\u surf.set\u colorkey255、255、255 pygame.draw.circlecover_surf,255,255,半径,半径,半径 定义要在以下剪辑中心中看到的圆形区域的中心。 在主应用程序循环中,清除显示并设置剪裁区域,然后绘制场景。更新显示之前,请在剪裁区域中绘制覆盖曲面:

运行时: [...] 清除屏幕并设置剪辑区域 screen.fill0 clip\u rect=pygame.rectprip\u center[0]-半径,clip\u center[1]-半径,半径*2,半径*2 screen.set\u clipclip\u rect 画场景 [...] 绘制透明圆并更新显示 screen.blitover\u surf,clip\u rect pygame.display.flip 最简单的例子:

导入pygame pygame.init screen=pygame.display.set_mode500500 clock=pygame.time.clock 半径=50 覆盖面积=pygame.表面半径*2,半径*2 覆盖表面填充0 cover\u surf.set\u colorkey255、255、255 pygame.draw.circlecover_surf,255,255,半径,半径,半径 运行=真 运行时: 时钟滴答滴答 对于pygame.event.get中的事件: 如果event.type==pygame.QUIT: 运行=错误 clip\u center=pygame.mouse.get\u pos 清除屏幕并设置剪辑区域 screen.fill0 clip\u rect=pygame.rectprip\u center[0]-半径,clip\u center[1]-半径,半径*2,半径*2 screen.set\u clipclip\u rect 画场景 对于范围为10的x: 对于范围为10的y: 如果x+y%2==0,则颜色=255、255、255,否则为255、0、0 pygame.draw.rectscreen,颜色,x*50,y*50,50,50 绘制透明圆并更新显示 screen.blitover\u surf,clip\u rect pygame.display.flip 如果需要多个圆形绘图区域,请创建一个与显示大小相同的圆形绘图区域,并设置白色颜色键:

cover\u surf=pygame.Surface400 cover\u surf.set\u colorkey255、255、255 将整个曲面填充为黑色,并在曲面上绘制白色圆圈:

覆盖表面填充0 pygame.draw.circlecover_surf,255,255,100,100,50 pygame.draw.circlecover_surf,255,255,300,300,70 在更新显示之前,在窗口上单击“覆盖”按钮:

运行时: [...] 绘制透明圆并更新显示 screen.blitover\u surf,0,0 pygame.display.flip 最简单的例子:

导入pygame pygame.init screen=pygame.display.set_mode400400 clock=pygame.time.clock cover\u surf=pygame.Surface400 cover\u surf.set\u colorkey255、255、255 px=[100200300] dx=[1,2,3] 运行=真 运行时: 时钟滴答滴答 对于pygame.event.get中的事件: 如果event.type==pygame.QUIT: 运行=错误 创建覆盖曲面 覆盖表面填充0 对于范围3中的i: 半径=40+i*20 pygame.draw.circlecover_surf,255,255,px[i],100+i*100,半径 px[i]+=dx[i] 如果px[i]<半径或px[i]>400-半径: dx[i]=-dx[i] 画场景 对于范围为10的x: 对于范围为10的y: 如果x+y%2==0,则颜色=255、255、255,否则为255、0、0 pygame.draw.rectscreen,颜色,x*50,y*50,50,50 绘制透明圆并更新显示 screen.blitover\u surf,0,0 pygame.display.flip
我建议一个解决方案,它结合了一个剪裁区域和绘制一个黑色矩形,中间有一个圆形透明区域

定义半径并创建半径为两倍的正方形

半径=50 覆盖面积=pygame.表面半径*2,半径*2 设置标识透明颜色的白色关键点,并在曲面上绘制白色透明圆:

cover\u surf.set\u colorkey255、255、255 pygame.draw.circlecover_surf,255,255,半径,半径,半径 定义要在以下剪辑中心中看到的圆形区域的中心。 在主应用程序循环中,清除显示并设置剪裁区域,然后绘制场景。在更新t之前 他在剪裁区域中显示“绘制覆盖曲面”:

运行时: [...] 清除屏幕并设置剪辑区域 screen.fill0 clip\u rect=pygame.rectprip\u center[0]-半径,clip\u center[1]-半径,半径*2,半径*2 screen.set\u clipclip\u rect 画场景 [...] 绘制透明圆并更新显示 screen.blitover\u surf,clip\u rect pygame.display.flip 最简单的例子:

导入pygame pygame.init screen=pygame.display.set_mode500500 clock=pygame.time.clock 半径=50 覆盖面积=pygame.表面半径*2,半径*2 覆盖表面填充0 cover\u surf.set\u colorkey255、255、255 pygame.draw.circlecover_surf,255,255,半径,半径,半径 运行=真 运行时: 时钟滴答滴答 对于pygame.event.get中的事件: 如果event.type==pygame.QUIT: 运行=错误 clip\u center=pygame.mouse.get\u pos 清除屏幕并设置剪辑区域 screen.fill0 clip\u rect=pygame.rectprip\u center[0]-半径,clip\u center[1]-半径,半径*2,半径*2 screen.set\u clipclip\u rect 画场景 对于范围为10的x: 对于范围为10的y: 如果x+y%2==0,则颜色=255、255、255,否则为255、0、0 pygame.draw.rectscreen,颜色,x*50,y*50,50,50 绘制透明圆并更新显示 screen.blitover\u surf,clip\u rect pygame.display.flip 如果需要多个圆形绘图区域,请创建一个与显示大小相同的圆形绘图区域,并设置白色颜色键:

cover\u surf=pygame.Surface400 cover\u surf.set\u colorkey255、255、255 将整个曲面填充为黑色,并在曲面上绘制白色圆圈:

覆盖表面填充0 pygame.draw.circlecover_surf,255,255,100,100,50 pygame.draw.circlecover_surf,255,255,300,300,70 在更新显示之前,在窗口上单击“覆盖”按钮:

运行时: [...] 绘制透明圆并更新显示 screen.blitover\u surf,0,0 pygame.display.flip 最简单的例子:

导入pygame pygame.init screen=pygame.display.set_mode400400 clock=pygame.time.clock cover\u surf=pygame.Surface400 cover\u surf.set\u colorkey255、255、255 px=[100200300] dx=[1,2,3] 运行=真 运行时: 时钟滴答滴答 对于pygame.event.get中的事件: 如果event.type==pygame.QUIT: 运行=错误 创建覆盖曲面 覆盖表面填充0 对于范围3中的i: 半径=40+i*20 pygame.draw.circlecover_surf,255,255,px[i],100+i*100,半径 px[i]+=dx[i] 如果px[i]<半径或px[i]>400-半径: dx[i]=-dx[i] 画场景 对于范围为10的x: 对于范围为10的y: 如果x+y%2==0,则颜色=255、255、255,否则为255、0、0 pygame.draw.rectscreen,颜色,x*50,y*50,50,50 绘制透明圆并更新显示 screen.blitover\u surf,0,0 pygame.display.flip