繁体   English   中英

pygame和平铺的地图合集

[英]pygame and tiled map collsions

我试图使播放器精灵不再掉落在平台矩形顶部。 在过去的两天里,我尝试了很多事情,但我比以往任何时候都更加迷失。 非常感谢。 我正在使用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

我想您的问题是您没有使用播放器的rect属性来定义播放器的位置。 您正在使用pygame的精灵,因此请按预期的方式使用它们。

所有处理精灵的pygame函数(例如spritecollide )将使用rect属性,但是在您的代码中,player类具有附加的pos属性,而Platform也具有y属性。

删除它们,并仅使用rect来存储精灵的大小和位置。

当您要移动精灵时,只需更改其rect (例如,使用move_ip等)或其属性即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM