天天看點

pygame-KidsCanCode系列jumpy-part3-重力及碰撞檢測

pygame-KidsCanCode系列jumpy-part3-重力及碰撞檢測

這個遊戲叫jumpy,大緻玩法就是模拟超級瑪麗一樣,可以不停在各個檔闆上跳動,同時受到重力的作用,會向下掉,如果落下時,沒有站在檔闆上,就挂了。

這節,我們加入重力因素,繼續改造sprites.py

建立了一個Platform類,用來模拟檔闆,其實就是一個綠色的長矩形條;其次Player在update中,acc加速度初始化時,引入了垂直方向的加速度,其值仍然在settings.py中定義:

 然後在main.py中使用這個Platform類:

這裡使用到了spritecollide這個超級好用的方法,可以很輕松的搞定碰撞檢測。

pygame-KidsCanCode系列jumpy-part3-重力及碰撞檢測

如果仔細觀察的話,會發現一個小問題,方塊掉到檔闆上後,一直在上下輕微晃動,從Vel的調試輸出值,也能看到y方向的速度,一直在0.5和0之間切換。原因在于:Player的update()方法,初始化時,給了acc在y方向0.5的加速度(具體值在settings.py中通過PLAYER_GRAVITY定義), 這個0.5,直到碰撞後,在main.py中,才通過self.player.pos.y = hits[0].rect.top糾正回來,即代碼先物體向下落0.5px, 然後再強制重新調整位置,讓它向上拉0.5px.

改進方法:将sprites.py中Player的update()方法改成下面這樣

即:最後三行,先判斷下y軸方向的位置變化量,隻有>=1px的情況下才更新,再運作下 

pygame-KidsCanCode系列jumpy-part3-重力及碰撞檢測

已經沒有剛才的抖動問題。注:個人感覺這更像是pygame在渲染機制上的一個缺陷,隻有0.5px這種不足1px的位移,才會有這個問題,同學們可以嘗試把PLAYER_GRAVITY從0.5改成2(即:讓每次的y軸位移>1px),也不會有抖動問題。

作者:菩提樹下的楊過

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀