[英]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.