我试图让玩家精灵停止在平台矩形顶部。在过去的两天里,我尝试了很多东西,然后我就失去了。非常感谢。我正在使用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
答案 0 :(得分:2)
我猜您的问题是您没有使用播放器的rect
属性来定义播放器的位置。你正在使用pygame的精灵,所以按照预期的方式使用它们。
处理精灵的所有pygame函数(例如spritecollide
)将使用rect
属性,但在您的代码中,播放器类具有额外的pos
属性,{{1} }也有Platform
属性。
删除它们,并使用y
专门存储精灵的大小和位置。
如果您想移动精灵,只需更改其rect
(例如使用rect
等)或其属性。