我目前正在设计基本的 pygame 项目。实际上是随机项目,这些只是随机的想法在普通白天流行。其中一个是挂钟。我使用sin
,cos
函数绘制时针,分针等等。
作为这些函数的结果,我获得了浮点值。哪个pygame不允许。因此,在绘制函数中使用它们之前,我round
和int()
所有值。这是有道理的,因为像素不能被部分填充。但是,我认为这会导致糟糕的图纸。
上面的图片是pygame模块绘制的时钟。如你所见,把手有点倾斜。不直。
我也在codeskulptor中实现了这一点。这是基本游戏(或任何图形)编程的python2环境。具有漂亮而清晰的功能,确实非常容易使用。我使用的浮点值不需要转换并直接接受。我不知道它是如何处理它的,但它显然更好。显然不仅仅是舍入和整数(这个词是否存在?)值。让我告诉你在codeskuptor中绘制的时钟:
如您所见,边缘更平滑。线条不会倾斜,而是直线。这显然比pygame更好。
但事实是,codeskuptor并没有实现比初级知识更难的许多模块和内置函数。它也不支持一个众所周知的编译器(基本上不支持python模块)。所以不能在计算机上工作,也不能用py2exe,pyinstaller编译。
所以我不想在pygame中实现所有这些,并获得与codeskulptor一样的平滑结果。也许是一种更好的方法来处理绘图的浮点数。非常感谢这方面的任何想法或知识。
My code for codeskuptor(Does not show realtime)
这些代码没有提供适当的评论,因为它们只是一个深夜的乐趣。我会解释任何必要的部分。
答案 0 :(得分:1)
总结上述评论,您在此处注意到的问题是抗锯齿。对于这些行,pygame提供aaline
函数,可用于绘制单行。不幸的是,这不支持不同的厚度。可能的解决方法可能是绘制一条正确厚度的线,并在其两侧绘制aaline
,或使用aapolygon
(来自gfxdraw
模块)绘制线条。
标准draw
模块不包含抗锯齿圈,但您可以使用gfxdraw
中的其他功能绘制抗锯齿圈aacircle
。
重要的是要注意gfxdraw
模块标有" experimental",因此不保证函数在pygame版本中保持不变。但对于您可能不关心的快速项目。
对于CodeSkulptor,他们在HTML5 <canvas>
元素上呈现线条,根据this question,默认情况下会启用抗锯齿功能。