pygame和平铺地图collsions

时间:2018-01-29 13:25:37

标签: python pygame tiled

我试图让玩家精灵停止在平台矩形顶部。在过去的两天里,我尝试了很多东西,然后我就失去了。非常感谢。我正在使用tmx加载平铺地图。每次检测到名称时都会添加一个Platform对象,而不是将其添加到列表中。我通过列表枚举来使用sprite.collide(self.player,plat)检查碰撞。这不起作用。

def update(self):
    for plat in self.platList:
        self.hits = pg.sprite.spritecollide(self.player,self.platList,False)
        if self.hits:
            if self.player.pos.y > self.hits[0].y:
                self.player.pos.y = self.hits[0].rect.top

 for tile in self.map.tmxdata.objects:
        if tile.name == "player":
            self.player = Player(self,tile.x,tile.y)
        if tile.name == "Platform":
            self.platList.append(Platform(self, tile.x, tile.y,tile.width,tile.height))
class Platform(pg.sprite.Sprite):
def __init__(self,game,x,y,width,height):
    self.game = game
    pg.sprite.Sprite.__init__(self)
    self.rect = pg.Rect(x,y,width,height)
    self.y = y
    self.rect.x = x
    self.rect.y = y

1 个答案:

答案 0 :(得分:2)

我猜您的问题是您没有使用播放器的rect属性来定义播放器的位置。你正在使用pygame的精灵,所以按照预期的方式使用它们。

处理精灵的所有pygame函数(例如spritecollide)将使用rect属性,但在您的代码中,播放器类具有额外的pos属性,{{1} }也有Platform属性。

删除它们,并使用y专门存储精灵的大小和位置。

如果您想移动精灵,只需更改其rect(例如使用rect等)或其属性。