2013-11-15 113 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