gpt4 book ai didi

python - pygame 和平铺 map 碰撞

转载 作者:行者123 更新时间:2023-12-01 02:14:06 24 4
gpt4 key购买 nike

我试图让玩家 Sprite 停止落在平台矩形顶部。在过去的两天里我尝试了很多事情,但我比以往任何时候都更加迷失。太感谢了。我正在使用 tmx 加载平铺 map 。每次检测到名称时,我都会添加一个平台对象,然后将其添加到列表中。我使用 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 的 Sprite ,因此请按照预期方式使用它们。

所有处理 Sprite 的 pygame 函数(例如 spritecollide)都将使用 rect 属性,但在您的代码中,玩家类有一个额外的 pos 属性,Platform 也有一个 y 属性。

删除它们,并专门使用 rect 来存储 Sprite 的大小和位置。

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

关于python - pygame 和平铺 map 碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com