我正在努力让玩家精灵停止掉在平台上。在过去的两天里,我尝试了很多事情,我比以往任何时候都更加迷茫。非常感谢。我正在使用tmx加载平铺地图。每次检测到一个平台对象的名称时,我都会添加一个平台对象,然后将其添加到列表中。我通过列举清单来检查冲突使用精灵.碰撞(自动播放器,平台)。这不管用。你知道吗
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
等)或它的属性。你知道吗相关问题 更多 >
编程相关推荐