pygame で衝突検出を実装しようとしています。x方向(左右)から壁にぶつかると完璧に機能します。残念ながら、y 方向から (上下から) 壁にぶつかると機能しません。プレイヤーが y 方向から壁にぶつかるたびに、スタックします。Google と stackoverflow で同様の質問を探しましたが、満足のいく答えが見つかりませんでした。
私のコード:
import pygame
class Player(pygame.sprite.Sprite):
change_x = 0
change_y = 0
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("Cool_guy.png").convert()
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def changespeed(self,x,y):
self.change_x+=x
self.change_y+=y
def update(self,walls):
#updates location of x coordinate
old_x = self.rect.x
new_x = self.change_x + old_x
self.rect.x = new_x
collide = pygame.sprite.spritecollide(self,walls,False)
if collide:
#Hit a wall go back to old position
self.rect.x = old_x
#updates location of y coordinate
old_y = self.rect.y
new_y = self.change_y+old_y
self.rect.y = new_y
if collide:
#hit a wall go back to old positon
self.rect.y = old_y
問題はこのクラスにあると思われるため、上記のこのコードは単なる私の Player クラスです (おそらく私の update 関数)。さらにコードが必要な場合は、質問を編集します。Python 3.x を使用しています