我正在pygame中使用python製作pacman風格的遊戲。目前我正在創造pacman必須避開迷宮的鬼怪/怪物。我創造了這些,並嘗試添加碰撞檢測的隨機移動,以便他們繞過迷宮,而不是遍佈屏幕。這些怪物的代碼是波紋管。我的問題是,Monster
似乎略有跳動,幾乎沒有動作,我怎麼能得到,順利通過像pacman鬼迷宮?任何幫助是極大的讚賞。隨機精靈運動和碰撞python
回答
我無法在計算機上測試您的代碼,因爲某些原因,python會返回一些錯誤。但讓我分析一下你的代碼。
這個問題似乎是從以下兩行出現:
self.rect.x += random.randint(-1,1)
self.rect.y += random.randint(-1,1)
這是你的update(self)
功能下面。
由於您將怪物設置爲「更新」每次屏幕刷新,因此每次您致電更新時,怪物會隨機向上,向下,向左或向右移動一個像素。你的「更新」函數每次調用一個從-1到1的隨機數。所以,你的怪物要麼以垂直和水平方向刷新+1或0或-1像素的方式刷新。因此,它們看起來很滑,並且根本不在任何位置移動。
你想要一個平穩的運動是你的「更新」功能移動你的怪物在一個恆定的方向。
我不知道去了解你的遊戲的最佳方式,但這裏是我的建議:(我的代碼只是一個指導性的,可能包含錯誤)
給怪物類變量或屬性稱爲「dir」,代表方向。一旦開始你的類,給予「目錄」從1到4的隨機值(代表上,下,左,右)
self.dir = random.randint(1,4)
然後,在你的「更新(個體經營)」的功能,寫一些if
聲明是這樣的:
if self.dir == 1: #Moving up
self.rect.y+=1;
if self.dir == 2: #Moving down
self.rect.y-=1;
if self.dir == 3: #Moving left
self.rect.x-=1;
if self.dir == 4: #Moving right
self.rect.x+=1;
這樣一來,你的怪物只能上下移動,向左或向右一次一個方向。
有了這個,我想你必須修改你的「碰撞檢查」代碼。根據牆上的哪個部分,讓你的代碼改變你的怪物的方向。
希望這會有所幫助! :)
編輯:
你的第二個問題是,你的怪物並沒有與牆壁碰撞正確。這裏是你的代碼:
if self.rect.x > -1: # Moving right; Hit the left side of the wall
self.rect.right = wall.rect.left
if self.rect.x < 0: # Moving left; Hit the right side of the wall
self.rect.left = wall.rect.right
if self.rect.y < -1: # Moving down; Hit the top side of the wall
self.rect.bottom = wall.rect.top
if self.rect.y > 0: # Moving up; Hit the bottom side of the wall
self.rect.top = wall.rect.bottom
我覺得很奇怪,你的支票基於其位置的怪物的方向。以if self.rect.x > -1:
爲例。 "self.rect.x"
實際上是你的怪物的x座標。所以這並不表示你的怪物的方向。所以我不認爲你可以在你的if
陳述中使用self.rect.x
或self.rect.y
進行碰撞。
取而代之,請考慮使用我剛推薦給您的「dir」。 我會改變你的第一行,你可以做它的其餘部分。
if self.dir == 4: # Moving right; Hit the left side of the wall
self.rect.right = wall.rect.left
之後,你的怪物將停止,因爲它會嘗試再次朝相同的方向移動,但是這段代碼會停止它。所以,你必須再次隨機地改變方向。只要確保它不再選擇相同的方向。現在我會把它作爲你的一個難題。
編輯2:
你提到你的碰撞不會對頂部和底部的工作。
了一段時間之前,我得到您的錯誤;)
if self.dir == 1: #Moving up
self.rect.y+=2;
if self.dir == 2: #Moving down
self.rect.y-=2;
我想你互換的y+=2
和y=-2
。所以你的上下運動是互換的。
- 1. 如何隨機移動精靈和保持碰撞工作 - Cocos2d?
- 2. Xna碰撞移動精靈
- 3. 與精靈碰撞
- 4. Phaser P2碰撞殺死碰撞精靈
- 5. Cocos2D隨機精靈運動
- 6. 工作精靈碰撞
- 7. 兩個精靈的碰撞
- 8. 的cocos2d精靈碰撞
- 9. 與UIImageView碰撞的精靈
- 10. 精靈碰撞Andengine(Android)
- 11. 精靈和碰撞檢測cocos2d android
- 12. Cocos2d,旋轉(透明)精靈碰撞
- 13. 更新碰撞精靈只有
- 14. cocos2d精靈碰撞檢測包圍盒
- 15. Android AndEngine:簡單的精靈碰撞
- 16. 查找兩個精靈的碰撞點
- 17. 不能讓我的精靈碰撞?
- 18. SpriteKit中的精靈之間的碰撞
- 19. XNA劍精靈碰撞檢測
- 20. AndEngine:兩個精靈的碰撞
- 21. 閱讀精靈,檢測碰撞
- 22. 碰撞檢測後顯示精靈
- 23. 檢測精靈之間的碰撞
- 24. cocos2d旋轉精靈碰撞檢測
- 25. 具有基本精靈碰撞的AtrributeError
- 26. 精靈熄滅屏幕碰撞
- 27. 精靈碰撞的單元格中心
- 28. 如何檢測精靈表的精靈幀的碰撞
- 29. 與另一個精靈作爲父母的精靈碰撞
- 30. 移動精靈但不會與Phaser中的其他精靈碰撞
哦,我明白了!是的,精靈現在順利移動謝謝你!由於它有你沒有的圖像,所以它可能不適用於你的圖像,我試圖通過在圖像中添加不同的值來改變碰撞,檢查左側碰撞似乎正常,但沒有其他方向!你能提出任何價值嗎?再次感謝! – alfiej12
爲了方便起見,我已經將整個遊戲添加到了代碼中,如果您將怪物類中的#loadbackground和self.image中的圖像名稱更改爲與代碼具有相同文件的任何圖像,則代碼將起作用好的,再次感謝你! – alfiej12
不,這個錯誤不是關於圖像,因爲我放置了我自己的圖像。錯誤說''super()至少需要1個參數(0給出)「' – Sciffany