Python 我的碰撞函数中的For循环从未命中?

Python 我的碰撞函数中的For循环从未命中?,python,pygame,Python,Pygame,我正试图在pygame中制作一个基于平铺的游戏,但我的碰撞功能无法正常工作。到目前为止,当我点击WASD时,它会在实际移动精灵之前检查这是否是一个有效的移动 def move(self, dx=0, dy=0): print("TEST" + str(self.collide_with_walls(dx, dy))) if not self.collide_with_walls(dx, dy): self.x +

我正试图在pygame中制作一个基于平铺的游戏,但我的碰撞功能无法正常工作。到目前为止,当我点击WASD时,它会在实际移动精灵之前检查这是否是一个有效的移动

    def move(self, dx=0, dy=0):
        print("TEST" + str(self.collide_with_walls(dx, dy)))
        if not self.collide_with_walls(dx, dy):
            self.x += dx
            self.y += dy
这是我的move函数,它调用我的collide函数(我想我会包括它以防万一)

这是我的碰撞函数,它不断返回false。重要的是要注意,它从不打印“2”,所以它永远不会进入for循环,当我打印出“self.game.walls”时,它会打印”

这里是墙函数,它将墙放置在我有预感的地方,但我似乎无法解决问题。任何建议都有帮助:)

我建议在碰撞测试中使用And和or。例如:

def与墙碰撞(self,dx=0,dy=0):
new_rect=self.image.get_rect(左上方=(self.x+dx,self.y+dy))
对于self.game.walls中的墙:
如果new_rect.Collide rect(wall.rect):
打印(“撞墙”)
返回真值
返回错误

此打印的输出是什么(self.game.walls)?只是一个测试,看看里面存储了什么,考虑到它是如何进入碰撞功能的,但从来没有进入for循环。我的意思是,它会打印任何东西吗?self.game.walls应该是什么类别的对象?一个类似于墙的列表?它会打印。我在一年前写了大部分内容,所以不完全确定,但我一直觉得它是w作为列表。编辑:当我打印出它的类型时,问题出在我的self.game.walls中,我无法进入碰撞检测部分,因为for循环从未运行过。@GavinTynan那么如果墙不在
self.game.walls
中,它们在哪里?谁知道呢_(ツ)_/¯
def collide_with_walls(self, dx=0, dy=0):
        print("Here 1")
        print(self.game.walls)
        for wall in self.game.walls:
            print("2")
            if wall.x == self.x + dx and wall.y == self.y + dy:
                print("Hit wall")
                return True
            print("No hit wall")
        return False
class Wall(pg.sprite.Sprite):
    def __init__(self, game, x, y):
        self.groups = game.all_sprites, game.walls
        pg.sprite.Sprite.__init__(self, self.groups)
        self.game = game
        self.image = pg.Surface((TILESIZE, TILESIZE))
        self.image.fill(BLACK)
        self.rect = self.image.get_rect()
        self.x = x
        self.y = y
        self.rect.x = x * TILESIZE
        self.rect.y = y * TILESIZE