反锯齿电弧 Pygame

By simon at 7 天前 • 0人收藏 • 5人看过

我正在尝试使用 Pygame 在 Python 中编写一个简单的循环计时器。 目前的情况是这样的:

正如你所看到的,蓝色线条是非常波浪状的,并且有白色的点。 我通过使用 pygame.draw.arc ()函数来实现这条蓝线,但它不是反锯齿的,而且看起来很糟糕。 我想它是抗锯齿,但 gfxdraw 模块,应该让我实现这一点,不支持弧宽选择。 下面是代码片段:

Pygame.draw.arc (screen,blue,[ center [0]-120,center [1]-120,240,240) ,pi / 2,pi / 2 + pi * i * koef,15) pygame.gfxdraw.aacircle (screen,center [0] ,center [1] ,105,black) pygame.gfxdraw.aacircle (screen,center [0] ,center [1] ,120,black)
2 个回复 | 最后更新于 7 天前
7 天前   #1

我不知道任何 pygame 函数可以解决这个问题,这意味着你基本上必须自己编写一个解决方案(或者使用 pygame 之外的其他东西) ,因为画正如你所提到的开枪不会让你变胖的。

一个非常丑陋但是简单的解决方案是在弧段上画多次,总是稍微移动以"填补"缺失的间隙。 这仍然会在计时器弧线的最前面留下一些别名,但是其余部分将被填充。

从 pygame.locals import * import pygame.gfxdraw import math # Screen size Screen height 350 Screen width 500 # Colors BLACK (0,0,0) WHITE (255,255,255,255) GREY (150,150,150) RED (255,0,0) # initialisation pygame.init () Screen pygame.display.set mode (Screen width,Screen height) done False clock py.time。 时钟() # 我们需要这个,如果我们想要能够指定我们的 # 弧度而不是弧度 def degreesToRadians (deg) : return deg / 180.0 * math.pi # 画一个弧,它是一个圆的一部分。 # 我们传入屏幕和颜色 # 后面跟着一个元组(x,y) ,它是圆的中心,还有半径。 # 接下来是我们要画的圆的"单位圆"(0到360) # 的起始和结束角度,最后是像素分辨率圆弧(screen,color,center,radius,startDeg,endDeg,thickness)的粗细: (x,y) center rect (x-radius,y-radius,radius * 2,radius * 2) startRad degreesToRadians (startDeg) endRad degreesToRadians (endDeg) pypygame。 画。 弧(屏幕,颜色,矩形,startRad,endRad,厚度) # 用背景屏幕填充屏幕。 填充(白色)中心[150,200] pygame。 开枪。 圆圈(掩护,中心[0] ,中心[1] ,105,布莱克)。 开枪。 圆圈(掩护,中心[0] ,中心[1] ,120,布莱克)。 显示。 Update ()步骤10 maxdeg0 while not done: for event in pygame。 事件。 Get () : if event. 类型 pygame。 退出: done True maxdeg maxdeg + step for i in range (min (0,maxdeg-30) ,maxdeg) : drawCircleArc (screen,RED,(150,200) ,119,i + 90,max (i + 10,maxdeg) + 90,14) # + 90将从右移动到顶部 pygame (粗略地)。 显示。 翻转时钟。 滴答(2) # 确保最多60个帧率。 退出()

请注意,我已经复制了德里克斯坦及拉伸圆弧从Https://www.cs.ucsb.edu/~pconrad/cs5nm/08f/ex/ex09/drawcirclearcexample.py

我一般不推荐这种解决方案,但在紧要关头也许可行。

7 天前   #2

好吧,这真的很老了,但是为什么不试着画一些派呢。 例如画一个馅饼,然后一个未填充的圆作为外圈,然后一个填充的圆作为内圈,另一个未填充的圆作为内圈。

所以馅饼-未填充的圆-填充的圆-未填充的.

这个命令有点武断,但是如果你仍然有这个问题,试一试。 (顺便说一句,我还没有试过,但我认为它会起作用的)

登录后方可回帖

Loading...