pygame和平铺地图集合

2024-04-27 04:54:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力让玩家精灵停止掉在平台上。在过去的两天里,我尝试了很多事情,我比以往任何时候都更加迷茫。非常感谢。我正在使用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

Tags: rectselfgameif平台width精灵pg
1条回答
网友
1楼 · 发布于 2024-04-27 04:54:32

我想你的问题是你没有使用玩家的rect属性来定义玩家的位置。你使用的是pygame的精灵,所以按预期的方式使用它们。你知道吗

所有处理精灵的pygame函数(例如spritecollide)都将使用rect属性,但是在您的代码中,player类有一个额外的pos属性,Platform也有一个y属性。你知道吗

移除它们,然后专门使用rect来存储精灵的大小和位置。你知道吗

当你想移动一个精灵时,只需改变它的rect(例如用move_ip等)或它的属性。你知道吗

相关问题 更多 >