2016-02-09 50 views
0

我目前正在設計基本pygame項目。實際上隨機的項目,這些只是隨意的想法,在白天時間流傳到我腦海裏。其中之一是掛鐘。我在哪裏使用sin,cos函數來繪製時針,分針等。Pygame繪製行爲

作爲這些函數的結果,我獲得了浮點值。哪個pygame不允許。所以我使用它們之前的所有值都在繪圖函數中。這是有道理的,因爲像素不能被部分填充。但是,我認爲這會導致不良的圖紙。

pygame clock

上面的圖像是由pygame的模塊引出的時鐘。正如你看到的手柄有點傾斜。不直。

我也在codeskulptor中實現了這個。這是基本遊戲(或任何圖形)編程的python2環境。功能不錯,功能清晰,確實很容易使用。我使用的float值不需要直接轉換。我不知道它如何處理它,但它顯然更好。顯然不只是四捨五入和整數(這個詞是否存在?)值。讓我告訴你在codeskuptor繪製的時鐘:

codeskuptor clock

正如你所看到的,邊緣更加平滑。線條不會傾斜,而是筆直。這顯然比pygame更好。

但是事情是,codeskuptor沒有實現許多模塊和內置的功能,比起始水平的知識更難。它也不支持一個衆所周知的編譯器(基本上不是Python模塊)。所以不能在計算機上工作,不能用py2exe,pyinstaller編譯。

所以我不想在pygame中實現所有這些,並且像在codeskulptor中一樣獲得平滑的結果。也許更好的方法來處理浮點繪圖。任何想法或在這方面的知識將不勝感激。

My code for codeskuptor(Does not show realtime)

My code for pygame

的代碼,因爲他們只是一個深夜的樂趣罷了並不提供正確的評論。我會解釋任何必要的部分。

+1

「整數」在「四捨五入」一詞中被準確地捕獲:)你是否嘗試過['aaline'](http://www.pygame.org/docs/ref/draw.html#pygame.draw.aaline )函數繪製反鋸齒線? – whrrgarbl

+0

那麼我的意思是圓(3.4)給你3.0然後你需要int():)讓我結帳aaline – Rockybilly

+0

繪製圈也是有點關閉。就像你畫一個圓圈一樣。圖形上有空白點,使其看起來很糟糕。也許是所有pygame繪圖的東西。 – Rockybilly

回答

1

總結上面的評論,你在這裏注意到的問題是反鋸齒。對於這些行,pygame提供了aaline函數,它可以用來繪製一行代碼。不幸的是,這不支持變化的厚度。潛在的解決方法是繪製一條正確厚度的線,並在其兩側繪製一個aaline,或使用aapolygon(從gfxdraw模塊)繪製線。

標準draw模塊不包含反鋸齒圓圈,但您可以使用gfxdraw中的其他函數繪製反鋸齒圓圈,aacircle

重要的是要注意gfxdraw模塊被標記爲「實驗」,所以功能不保證在pygame的各個版本中持續存在。但是對於你可能不需要擔心的快速項目。

至於CodeSkulptor,它們正在渲染HTML5 <canvas>元素上的行,該元素根據this question默認打開了反鋸齒。

+0

感謝您的回答。雖然我期待着一個涵蓋繪圖基礎的全面答案,但它不是你的錯,pygame不支持足夠的功能。所以我接受你的答案。 – Rockybilly

+0

不確定基本面是什麼意思?我一直專注於您提出的具體問題,而不是計算機圖形。查找「抗鋸齒」將是一個很好的開始,如果你想了解更多關於特別是如何繪製的信息,可能要查看pygame來源。基本上,必須將函數映射到像素,但不能繪製半個像素,因此最終會出現鋸齒狀邊緣或「鋸齒」。抗鋸齒嘗試通過計算邊緣像素的一些中間顏色來平滑此問題。 – whrrgarbl

+0

我想我可能會使用aapolygon達到我的目的。 – Rockybilly