当前位置: 首页 > 知识库问答 >
问题:

C 平滑播放器 - 墙壁 - 碰撞(滑动墙壁)

夏景胜
2023-03-14

我已经尝试解决了平滑的玩家-墙壁碰撞的问题,这样玩家可以沿着墙壁滑动。

我尝试了以下内容:

playerBox->move();
if (playerBox->intersects(wall)) {
    clearMovement();
    movePlayerBoxBack();
}

但是如果玩家碰到了墙,他不会滑动...他只是停下来了。(我对W,A,S,D也是分开做的。)

只有当我将玩家位置设置回他正在触摸的墙壁位置时,它才有效。如下:

player->move();
if (intersect) {
    moveToWall();
}

但是它不起作用,因为对于与另一面墙相连的墙,玩家会接触更多的边,玩家会跳到角落...所以它只适用于一面墙...

我的问题是:如何以另一种方式使玩家与墙的碰撞平滑,这种方式也适用于与一个或多个其他墙连接的墙。

共有1个答案

淳于星宇
2023-03-14

你可以从玩家身上投射光线,看看它是否击中墙壁。如果确实发生碰撞,请使用墙的法线创建一个向量,该向量沿玩家运行方向的边运行。

 类似资料:
  • 我有一个球,我可以在由大小相等的瓷砖组成的地图上移动。玩家应该不能在较暗且有黑色边框的瓷砖上行走。我有一个多维的瓷砖阵列,我用它来检查哪些瓷砖是实心的。 我希望玩家在水平和垂直移动时,可以靠墙滑动。问题是,如果他那样做,他就会固执己见。我设法使它在每个轴上都能完美工作,但是分开的。下面是我的水平碰撞检查代码: level.isBlocked() 方法检查数组的索引是否被实心磁贴占用。i 和 j 变

  • 所以我目前正在尝试做一个几乎像迷宫一样的游戏。问题是墙壁碰撞,一旦角色撞到墙上,我就不能再把他弄出来了,不管碰撞后我试图带他去哪个方向,他都会被“卡住”。我想的一个解决方案是,每当角色撞到墙上时,“支持他”,这样就不会再检测到碰撞。然而,当我这样做的时候,他以一种奇怪的方式穿墙。这是我的代码,所以你们可以知道我在做什么: 这段代码的很大一部分实际上是从另一个问同样问题的人那里得到的。即使按照另一个

  • 我知道已经有一些关于墙壁碰撞的问题了,但是这些答案中的技术都没有帮助我。我正在做一个没有重力的自上而下的探索游戏。运动很好,但是一旦我制造了墙壁和碰撞,它就开始出现故障并传送。我已经包含了(并大大减少了)我认为问题所在的两个功能,在底部我包含了整个代码。 根据pygame精灵墙碰撞的建议,我分割了x和y墙碰撞代码。墙壁碰撞代码基于https://github.com/marcusmoller/py

  • 我一直在尝试在Libgdx中找到/创建矩形的碰撞检测,但似乎什么都做不到。我有一个叫bucket的矩形,宽度和高度为64,还有一个叫wall的矩形,宽度和高度为64。我试着让玩家不穿过矩形,可以在粘墙的同时继续移动,而不需要通过相位或随机传送。我的方法在有1个块的情况下有效,但当有多个块的时候,它就会中断,不起作用。 我知道这种方法很难看但这只是实验 如果有人能给我指出正确的方向或分享一些对我有帮

  • 我一直在尝试使用碰撞检测来阻止物体相互碰撞。但我不知道怎么做。 当物体碰撞时,我试着颠倒它们速度矢量的方向(所以它远离碰撞的地方),但是有时物体会卡在对方体内。 我试着改变他们的速度,但这只是父母彼此的反对。 有没有一种简单的方法来限制物体的运动,这样它们就不会穿过其他物体?我一直在使用矩形相交来进行碰撞,我还尝试了圆形冲突检测(使用对象之间的距离)。 思想? 希望它不太难阅读。 编辑:所以我一直

  • 我正在用python和pygame开发一个平台游戏。完整代码可以在“https://github . com/C-Kimber/FBLA _ Game”找到。我遇到的问题是玩家精灵和墙壁精灵之间的碰撞,特别是角落。当玩家按下x移动键并跳跃时,玩家要么不动,要么被卡住。以下是碰撞示例: 我尝试过其他方法,比如用速度来确定碰撞的因素,但这是迄今为止效果最好的方法。如果你能提供一个解决方案,我将不胜感激