Pygame:碰撞时轴锁定,实现'墙面滑动效果'

时间:2018-06-15 13:38:46

标签: python pygame collision

我一直致力于为我的最终项目制作一款类似于Gungeon的游戏。碰撞是使用网格系统进行的,并且碰撞从文本文件加载并转换为碰撞网格。我希望碰撞只限制与某物碰撞的轴。例如,如果您向西北方向进入垂直墙,则只能向北移动。所以我尝试实现这一点的方法是根据鼠标输入预测玩家的未来位置。我这样做是使用一个检测鼠标输入并返回'moveX'和'moveY'变量的函数,该变量是玩家在没有碰撞任何东西时应该移动的距离。

然后,我创建了两个矩形对象,我应用了水平移动,并应用了垂直移动。

newPlayerRectX = p.Rect(movePlayerRect[0]+moveX,movePlayerRect[1],movePlayerRect[2],movePlayerRect[3])
newPlayerRectY = p.Rect(movePlayerRect[0],movePlayerRect[1]+moveY,movePlayerRect[2],movePlayerRect[3])
然后我检查他们中的任何一个是否与任何东西发生碰撞,如果他们碰到了,我只是限制了那个方向的运动,如果他们没有,我只是移动了函数预测的数量。 'collideList'就是所有靠近玩家的碰撞对象。

#Check to see if the player collides with anything near it
for i in range(len(collideList)):
    if newPlayerRectX.colliderect(collideList[i][-1]) == True:
        xoffset = False

    elif newPlayerRectY.colliderect(collideList[i][-1]) == True:
        yoffset = False

#Move player
if xoffset == True:
    curPlayer.X += moveX
if yoffset == True:
    curPlayer.Y += moveY

然而,有时候玩家只会穿过固体块。我似乎无法弄明白为什么。我的玩家的碰撞盒比实际的地图碰撞小。如果有人能提供帮助,那将非常感激。

0 个答案:

没有答案