我正在尝试在pygame中实现碰撞检测。当我从x方向(左和右)进入墙壁时它完美地工作。不幸的是,当我从y方向(从上到下)进入墙壁时,它不起作用。当玩家从y方向进入墙壁时,它会卡住。我在谷歌和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类,因为我怀疑问题出在这个类中(可能是我的更新函数)。如果您需要更多代码,我会编辑问题。我使用的是Python 3.x
答案 0 :(得分:1)
我认为如果你同时处理x和y,它会更容易,甚至可能修复你的代码:
def update(self,walls):
old_x = self.rect.x
new_x = self.change_x + old_x
old_y = self.rect.y
new_y = self.change_y + old_y
self.rect.x = new_x
self.rect.y = new_y
collide = pygame.sprite.spritecollide(self,walls,False)
if collide:
#Hit a wall go back to old position
self.rect.x = old_x
self.rect.y = old_y
#updates location of x and y coordinates