抓到pygame的bug

更新於 2024/10/04閱讀時間約 5 分鐘

寫完《The Nature of Code閱讀心得筆記——使用Python實作》 《The Nature of Code閱讀心得與Python實作》第一章之後,就照原書的建議,開始用程式來打造一個生態系統。

因為進度才到第一章,能用的東西不多,當然不可能寫出什麼太複雜的效果出來,所以就決定用第一章最後一個範例當基礎,先試著做出些簡單的效果來。雖然這些效果都很簡單,但可以變成以後製作比較複雜效果時的「零件」來使用,零件越多,打造出來的生態系統應該會越豐富。

第一章最後一個範例所呈現的效果,是一堆會跟著滑鼠游標跑的球。看著這些追逐著滑鼠游標的球,決定讓它們不再像貓想抓老鼠一樣,追著不是真的老鼠的滑鼠跑,而讓它們回歸身為球的初心,變成在畫面中跑來跑去,碰到邊邊會反彈的球。

程式很快就寫好了,一堆球也在畫面上跑來跑去。不過,有個地方卻怪怪的,有時候當球碰到左邊邊界反彈時,會有條橫跨畫面的黑色長條快速地閃了一下。除了這個奇怪的現象之外,其他一切都正常。這究竟是怎麼回事?

難道是程式哪裡有問題?看到奇怪的現象,第一個冒出來的念頭,當然就是懷疑自己寫的程式。

為了要找出可能的程式錯誤,先把球的數量減少到只剩一個,然後看看當球碰到左邊邊界時,各個數字如球的座標、速度、加速度等,有沒有不對勁的地方。結果發現,當球碰到左邊邊界而閃現黑色長條時,球的中心點x座標是負值。

看來這應該是pygame的bug,而不是自己寫的程式有問題。為了進一步證實這個猜測,重寫了一個單純只畫出圓球的程式,除了畫出不同位置的圓球之外,沒有任何其他作用,結果如下:

圖中由上而下,圓球中心的座標分別為

(0, 50)
(-0.99999, 100)
(-1.0, 150)
(-16, 200)
(-50, 250)
(-1, 300)

從這裡就可以看出來,當球心的x座標小於等於-1時,就會出現問題。另外,這些橫線的確是跟圓球有關,因為在畫球時,最後一個球的半徑,刻意設定成其他圓球的一半,而最下面的那條橫線,寬度也剛好是其他橫線的一半。

這個抓bug的過程,還真是挺像偵探辦案的過程,大膽假設,小心求證,推理、模擬驗證樣樣不可少。

確定這是pygame的bug之後,到pygame的github專案上查了一下。果然!已經有好幾個人提出同樣的問題了,看來新的版本出來時,應該就不會有這個問題了。

測試程式:

import pygame
import sys

pygame.init()

screen = pygame.display.set_mode((640, 360))
frame_rate = pygame.time.Clock()

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
while True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      sys.exit()

  screen.fill(WHITE)

  pygame.draw.circle(screen, BLACK, (0, 50), 16)
  pygame.draw.circle(screen, BLACK, (-0.99999, 100), 16)
  pygame.draw.circle(screen, BLACK, (-1.0, 150), 16)
  pygame.draw.circle(screen, BLACK, (-16, 200), 16)
  pygame.draw.circle(screen, BLACK, (-50, 250), 16)
  pygame.draw.circle(screen, BLACK, (-1, 300), 8)

  pygame.display.update()
  frame_rate.tick(60)
為什麼會看到廣告
avatar-img
15會員
130內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
俗話說「萬事起頭難」還真是一點也沒錯,從開始動筆寫《The Nature of Code閱讀心得筆記——使用Python實作》,到寫完頭一章,再到把文章放上網站開始發表,總共隔了快三個月的時間。
不知道為什麼,原本相安無事的兩個人,突然間看對了眼,開始出雙入對、形影不離。這除了讓人看了很不順眼之外,也很浪費時間。雖然想盡辦法要拆散他們,但都沒成功。逼不得已,只好狠下心來,冒險將一切抹除,讓他們走完「成、住、壞、空」最後的階段,輪迴至下一輪的「成、住、壞、空」。只是沒想到
天啊!怎麼這麼混亂!網路上有一卡車的文章在談class、object、instance有什麼不同;在Stack Overflow中,關於object和instance間的差異,也一再有人問起。只是啊只是,看了一大堆的討論、解釋,似乎是懂了,但又總覺得不踏實,就好像漂蕩在太空中,明明目標就在眼前,但無
在Python官網的Glossary第一次看到「duck typing」這個詞的時候,真的是很疑惑:Python怎麼會跟鴨子扯得上關係?更疑惑的是,那還是隻會打字的鴨子!
利用L-system畫出來的fractal圖案,最大的特色就是,橫看、豎看、左看、右看,全都一個樣,所以感覺總是不自然。就拿畫樹木來說吧,即便樹枝長度可以不一樣長,但是分岔的角度卻都一樣。所以囉,乍看之下,挺像一棵樹的,但仔細看的話,卻總覺得哪裡怪怪的,太人工化了。那怎麼讓它自然一些呢?
構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。
俗話說「萬事起頭難」還真是一點也沒錯,從開始動筆寫《The Nature of Code閱讀心得筆記——使用Python實作》,到寫完頭一章,再到把文章放上網站開始發表,總共隔了快三個月的時間。
不知道為什麼,原本相安無事的兩個人,突然間看對了眼,開始出雙入對、形影不離。這除了讓人看了很不順眼之外,也很浪費時間。雖然想盡辦法要拆散他們,但都沒成功。逼不得已,只好狠下心來,冒險將一切抹除,讓他們走完「成、住、壞、空」最後的階段,輪迴至下一輪的「成、住、壞、空」。只是沒想到
天啊!怎麼這麼混亂!網路上有一卡車的文章在談class、object、instance有什麼不同;在Stack Overflow中,關於object和instance間的差異,也一再有人問起。只是啊只是,看了一大堆的討論、解釋,似乎是懂了,但又總覺得不踏實,就好像漂蕩在太空中,明明目標就在眼前,但無
在Python官網的Glossary第一次看到「duck typing」這個詞的時候,真的是很疑惑:Python怎麼會跟鴨子扯得上關係?更疑惑的是,那還是隻會打字的鴨子!
利用L-system畫出來的fractal圖案,最大的特色就是,橫看、豎看、左看、右看,全都一個樣,所以感覺總是不自然。就拿畫樹木來說吧,即便樹枝長度可以不一樣長,但是分岔的角度卻都一樣。所以囉,乍看之下,挺像一棵樹的,但仔細看的話,卻總覺得哪裡怪怪的,太人工化了。那怎麼讓它自然一些呢?
構成L-system的,是一串由符號所構成的字串。這字串裡頭的符號,可以是字母或者是任何喜歡的鬼畫符,想要用emoji也可以,只要你喜歡,沒什麼不可以。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
【我推的孩子】改編動畫至從開播而來就人氣高企,儘管熱度最近稍有減退,不過依然是各大討論區的熱門話題。而動畫還是原作都受人喜愛的人氣角色「有馬加奈」有相當高的討論熱度,最近被討論得比較多的話題,就是【我推的孩子】動畫團隊「被懷疑」是有馬加奈的粉絲,直接不演,從「官方迫害」的黑粉轉化為「帽子黨」。
Thumbnail
「醫師,我終於可以好好睡覺了!」李先生開心地說。 從學生時代開始,李先生便飽受中重度異位性皮膚炎的困擾,四肢、軀幹之皮膚都有發紅、脫屑、極度搔癢的病灶,經常抓到破皮出血,也有許多滲出液。因為癢得很厲害,晚上的睡眠品質很差,白天上課精神就不好。為了不想遭受異樣眼光,遇到游泳課時,他總是得找理由請假。
Thumbnail
自律的目標是穩定,穩定的關鍵是「注意力管控」。這篇文我用五千字紀錄下我看過、實際執行過的所有管控注意力的九種方法。
Thumbnail
今天(7月24日)在柯文哲的YT頻道關心疫情,一如往常地市府官員一字排開面對媒體,卻也在留言區域看見柯文哲的支持者在公布確診數字之際大噴歧視言論。如此的言論無助於性別平權,也沒有防疫的實際效用。 《論語.顏淵》:「君子之德,風,小人之德,草;草上之風,必偃。」 為什麼支持者會有如失控的言論呢?因為早
Thumbnail
妳是否曾有這樣覺得,婚前婚後差很大的感覺?明明是很相愛的倆人才會一起步入婚姻,怎麼後來的日子開始有些不一樣? 到底哪裡出了問題,難道我的選擇錯了嗎? 不要急著下定論,相戀時倆人會好好面對問題、找到答案;婚後相愛的倆人,常因熟悉而覺得理所當然。調整一下婚姻生活中的優先次序,或許多少能降低彼此爭吵的
Thumbnail
《中時》自從離開余家、轉手旺旺之後,一改過往雋永風格,改走鄉民路線,多數報導均會引述「網友說法」,甚至把不知名網友的觀點當成標題,型塑「鄉民都這樣看」的風向,也令人好奇這些不知名網友從何而來,為何能夠屢屢語出驚人。 偶然間,立委蔡易餘昨晚發現,原來《中時》所謂的網友說法,可能都是《中時》自己杜撰
Thumbnail
做工作、操作生產機械、上台演講、打電動、寫作都要講究訣竅、找出手感。你不能把「手感」的英日文直接講成「手的感覺(觸覺)」,而是要用完全不同的詞來表達。那要怎麼說才對呢?
Thumbnail
許久不見的同學耳聞我的感情事跡,得知我很會抓男人說謊,她見了我,問"乀,妳不是很會抓姦,教我怎麼抓",我被這種粗魯的問法嚇了一跳,抓啥姦啊我,原來她的老公很討厭向她交待行蹤,一趟出門就是個三五天消失,這種行為我也是嚇了一跳,於是我先問她,老公是婚後才變成這樣的嗎?她說其實婚前就這樣了,對,我又再度被
Thumbnail
我們到底該如何評斷,《☾什麼,台灣高中三年二班的我竟然掉入了異世界,而且還遇見了總統!?✦》的意義與成效呢?
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
【我推的孩子】改編動畫至從開播而來就人氣高企,儘管熱度最近稍有減退,不過依然是各大討論區的熱門話題。而動畫還是原作都受人喜愛的人氣角色「有馬加奈」有相當高的討論熱度,最近被討論得比較多的話題,就是【我推的孩子】動畫團隊「被懷疑」是有馬加奈的粉絲,直接不演,從「官方迫害」的黑粉轉化為「帽子黨」。
Thumbnail
「醫師,我終於可以好好睡覺了!」李先生開心地說。 從學生時代開始,李先生便飽受中重度異位性皮膚炎的困擾,四肢、軀幹之皮膚都有發紅、脫屑、極度搔癢的病灶,經常抓到破皮出血,也有許多滲出液。因為癢得很厲害,晚上的睡眠品質很差,白天上課精神就不好。為了不想遭受異樣眼光,遇到游泳課時,他總是得找理由請假。
Thumbnail
自律的目標是穩定,穩定的關鍵是「注意力管控」。這篇文我用五千字紀錄下我看過、實際執行過的所有管控注意力的九種方法。
Thumbnail
今天(7月24日)在柯文哲的YT頻道關心疫情,一如往常地市府官員一字排開面對媒體,卻也在留言區域看見柯文哲的支持者在公布確診數字之際大噴歧視言論。如此的言論無助於性別平權,也沒有防疫的實際效用。 《論語.顏淵》:「君子之德,風,小人之德,草;草上之風,必偃。」 為什麼支持者會有如失控的言論呢?因為早
Thumbnail
妳是否曾有這樣覺得,婚前婚後差很大的感覺?明明是很相愛的倆人才會一起步入婚姻,怎麼後來的日子開始有些不一樣? 到底哪裡出了問題,難道我的選擇錯了嗎? 不要急著下定論,相戀時倆人會好好面對問題、找到答案;婚後相愛的倆人,常因熟悉而覺得理所當然。調整一下婚姻生活中的優先次序,或許多少能降低彼此爭吵的
Thumbnail
《中時》自從離開余家、轉手旺旺之後,一改過往雋永風格,改走鄉民路線,多數報導均會引述「網友說法」,甚至把不知名網友的觀點當成標題,型塑「鄉民都這樣看」的風向,也令人好奇這些不知名網友從何而來,為何能夠屢屢語出驚人。 偶然間,立委蔡易餘昨晚發現,原來《中時》所謂的網友說法,可能都是《中時》自己杜撰
Thumbnail
做工作、操作生產機械、上台演講、打電動、寫作都要講究訣竅、找出手感。你不能把「手感」的英日文直接講成「手的感覺(觸覺)」,而是要用完全不同的詞來表達。那要怎麼說才對呢?
Thumbnail
許久不見的同學耳聞我的感情事跡,得知我很會抓男人說謊,她見了我,問"乀,妳不是很會抓姦,教我怎麼抓",我被這種粗魯的問法嚇了一跳,抓啥姦啊我,原來她的老公很討厭向她交待行蹤,一趟出門就是個三五天消失,這種行為我也是嚇了一跳,於是我先問她,老公是婚後才變成這樣的嗎?她說其實婚前就這樣了,對,我又再度被
Thumbnail
我們到底該如何評斷,《☾什麼,台灣高中三年二班的我竟然掉入了異世界,而且還遇見了總統!?✦》的意義與成效呢?