Pygame绘制行为

时间:2016-02-09 21:57:01

标签: python python-2.7 integer pygame

我目前正在设计基本的 pygame 项目。实际上是随机项目,这些只是随机的想法在普通白天流行。其中一个是挂钟。我使用sincos函数绘制时针,分针等等。

作为这些函数的结果,我获得了浮点值。哪个pygame不允许。因此,在绘制函数中使用它们之前,我roundint()所有值。这是有道理的,因为像素不能被部分填充。但是,我认为这会导致糟糕的图纸。

pygame clock

上面的图片是pygame模块绘制的时钟。如你所见,把手有点倾斜。不直。

我也在codeskulptor中实现了这一点。这是基本游戏(或任何图形)编程的python2环境。具有漂亮而清晰的功能,确实非常容易使用。我使用的浮点值不需要转换并直接接受。我不知道它是如何处理它的,但它显然更好。显然不仅仅是舍入和整数(这个词是否存在?)值。让我告诉你在codeskuptor中绘制的时钟:

codeskuptor clock

如您所见,边缘更平滑。线条不会倾斜,而是直线。这显然比pygame更好。

事实是,codeskuptor并没有实现比初级知识更难的许多模块和内置函数。它也不支持一个众所周知的编译器(基本上不支持python模块)。所以不能在计算机上工作,也不能用py2exe,pyinstaller编译。

所以我不想在pygame中实现所有这些,并获得与codeskulptor一样的平滑结果。也许是一种更好的方法来处理绘图的浮点数。非常感谢这方面的任何想法或知识。

My code for codeskuptor(Does not show realtime)

My code for pygame

这些代码没有提供适当的评论,因为它们只是一个深夜的乐趣。我会解释任何必要的部分。

1 个答案:

答案 0 :(得分:1)

总结上述评论,您在此处注意到的问题是抗锯齿。对于这些行,pygame提供aaline函数,可用于绘制单行。不幸的是,这不支持不同的厚度。可能的解决方法可能是绘制一条正确厚度的线,并在其两侧绘制aaline,或使用aapolygon(来自gfxdraw模块)绘制线条。

标准draw模块不包含抗锯齿圈,但您可以使用gfxdraw中的其他功能绘制抗锯齿圈aacircle

重要的是要注意gfxdraw模块标有" experimental",因此不保证函数在pygame版本中保持不变。但对于您可能不关心的快速项目。

对于CodeSkulptor,他们在HTML5 <canvas>元素上呈现线条,根据this question,默认情况下会启用抗锯齿功能。