2013-11-15 121 views
0

我在Python 2.7中使用Pygame 1.9.2a来设计一个实验,并且迄今为止只在需要的时候才使用Pygame,并且不熟悉所有Pygame类或概念(例如,我不知道Sprites) 。绘制形状与渲染图像?

我需要在屏幕上的不同位置绘制多个(一次45-50个)形状,以创建拥挤的显示。形状从流离失所的Ts,移位Ls到线相交。 [就像_ |等]!对不起,我无法发布此图像,因为我显然没有10的声誉,这是发布图像所必需的。

我也需要这些形状在8个不同的方向。我最初正在考虑生成点列表并使用它们来画线。但是,对于单个形状,我需要四个点,而我需要这些形状中的五十个。再次,我不确定如何旋转这些曾经绘制。我可以使用Pygame变换或其他?我认为他们可以使用,对Rects说。或者我也必须为不同的方向生成点,以便在绘制时出现旋转的方向,即所需的方向?

我想到的替代方案是为GIMP或类似软件中的图形生成图像。但是,对于任何屏幕,我将不得不加载大约50张图像。我会不得不使用Pygame Image并且为这样的事情做50个电话?还是有更简单的方法来处理多个图像?

另外,哪种方法对性能影响更大?既然,这是一个实验,我也担心时序精度。我不知道在Pygame中是否有不同的方法来生成形状。请帮助我决定哪两种(或不同的方法)更适合我的用途。

谢谢!

+1

有一个图像并根据需要旋转它(通过使用旋转变换对其进行变换)。这将比为不同方向加载许多图像效率高得多。 – Thomas

+0

尝试使用每种方法 - 这是检查哪一种方法适合您的最佳方法。 – furas

+0

谢谢你的回应。 @Thomas我会尝试使用图像。我对生成点列表和绘制线的吸引力在于,我的形状的大小在各种实验因素中易于改变。而且,我认为最好是有这些变量,如果其中一个变化了,我只需要在程序中改变一个值。有了图像,我不得不每次都调整它们的大小。感谢您的答复。 – radhanila

回答

0

这是easer使用pygame.draw.rect()pygame.draw.polygon()(因为你不需要知道如何使用GIMP或Inkscape的:)),但你必须把它画在另一个pygame.Surface()(得到位图),比你可以旋转它,添加阿尔法(使透明),并且你可以把它放在屏幕上。

您可以创建函数来生成图像(使用Surface()),并在程序启动时以不同方向显示所有形状。如果您需要更好看的图像,您可以更改功能以加载在GIMP中创建的图像。

尝试使用每种方法 - 这是检查哪一种方法适合您的最佳方法。

顺便说一句:您可以保存生成的图像pygame.image.save(),然后加载它。您可以在一个图像上使用所有元素并使用图像的一部分Surface.get_clip()

+0

谢谢!我确实在GIMP中创建了一个图像。但是,当我尝试使用它时,我得到了一个45度或120度旋转图像的负面影响。 90和270工作正常。我的图像是36 x 36像素。该显示器具有1920 x 1200的分辨率。他们太小了吗?因为,首先我尝试使用图像尺寸的两倍,它工作得很好。而且,我不确定我可以使用多边形功能,但我想我可以使用rect()函数。而且,就像你说的那样,将它涂在另一个表面上,然后制作许多副本用于旋转。我担心这个旋转问题会持续下去。 – radhanila

+0

你使用'set_mode(...,0,32)'和'pygame.image.load(..)。convert()'? – furas

+0

我没有尝试Surface.convert(),没有帮助。但是,convert_alpha()解决了这个问题。谢谢!但是,使用pygame.transform旋转对于一个圆圈来说效果不佳。我必须将我的形状圈起来。但是,当我将整个形状(包括圆形)保存为图像并旋转时,它似乎已经丢失了一些像素。所以,现在,在我对形状进行旋转之后,我绘制了圆。如果你能告诉我一个更好的方法来创建圈子,那会很棒。而且,就性能而言,如果我加载图像或绘制形状,它会有所作为。 – radhanila