Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Box2D网格的碰撞_Java_Libgdx_Box2d - Fatal编程技术网

Java 基于Box2D网格的碰撞

Java 基于Box2D网格的碰撞,java,libgdx,box2d,Java,Libgdx,Box2d,首先让我快速告诉你我在尝试什么。我正在用Box2D玩类似俄罗斯方块的游戏,我知道在这种情况下Box2D可能不是最好的选择,但我真的需要有正常的物理,因为关卡有障碍物,如果你击中它们,方块应该会旋转 这里有一张图片来说明我的意思 案例1: 这就是我想要的 案例2: 这是我的一个想法,只是为了让落下的碎片的块大小稍微小一点,这样它们就可以很好地适应空的空间。正如预期的那样,这个问题是街区周围的空地。让它看起来像盒子不属于那个里 案例3: 保持下落块的块大小与“墙”块大小相同,它永远不会到达空空间,

首先让我快速告诉你我在尝试什么。我正在用Box2D玩类似俄罗斯方块的游戏,我知道在这种情况下Box2D可能不是最好的选择,但我真的需要有正常的物理,因为关卡有障碍物,如果你击中它们,方块应该会旋转

这里有一张图片来说明我的意思

案例1: 这就是我想要的

案例2: 这是我的一个想法,只是为了让落下的碎片的块大小稍微小一点,这样它们就可以很好地适应空的空间。正如预期的那样,这个问题是街区周围的空地。让它看起来像盒子不属于那个里

案例3: 保持下落块的块大小与“墙”块大小相同,它永远不会到达空空间,因为边碰撞并保持不变

那么,我如何才能使它适合于填补它的空白,而不显得怪异呢

编辑:如果我将坠落物体的大小减小,则在这种情况下无法工作:

下面的图片展示了我想要什么样的行为:

1)在身体上使用setFixedRotation(true)。
2) 使其略小于可用空间(从两侧)。使差异小到看不见效果(但对box2d来说就足够了)。

这将解决您的问题。
边缘不会接触,但如有必要,您也可以尝试消除摩擦。

注:
在您的用例中,使用物理引擎可能是一种过度的杀伤力,但这并不是一个坏主意,因为如果您正确地使用它,您不必做太多。
祝你好运

更新:
1) 不要使物体变小。让它们变薄。:)
这将解决您的第一个问题。

2) 若你们想在下一个例子中展示你们的行为,你们希望在下落时自由旋转+在接触地面时正确的方向。这两件事本质上是相互矛盾的

我建议你重新考虑一下你的策略。但是,如果你决心用同样的方法去做,还是有一些奇怪的方法来实现它(没有什么是不可能的,对吧?。
我现在能想到的一个是实现所有对象始终朝最近的正确方向移动的趋势(外部力矩作为当前方向的函数)。它应该在渲染中更新。它是一个有效的控制系统,但无法保证在碰撞时能够实现定向,而且物理学看起来也不自然。试着扩展你的想象力,享受乐趣。如果你能找到更好的办法,我当然想看看。


享受。

我想说,你可以使用普通的Box2d物理,直到你接近工件的安装位置,然后禁用物理并编写自己的逻辑,只要它“足够接近”,就可以进行补偿和块匹配。对于这样的问题,我建议不要使用物理引擎。它充满了问题,你最终会像这样。若块可以任意旋转,你们将如何检测线是否被填充?我不需要检查线是否被填充。我同意不使用物理引擎(我非常喜欢使用物理引擎)。大约5年前,我在C#()中看到了这个游戏的实现。你可以不用物理来做。如果得分是根据球员可以容纳多少块来做的,那么看起来你根本不需要瓷砖,第一张图片中的中间示例(2)应该可以。但我猜你可以检测到哪个块方块在它静止后被填充,然后用全尺寸的方格代替它。但是如果我使它稍微变小一点,即使是0000000×1%,它也不会在形状为“U”形状的情况下工作,而且它必须在中间的其他块周围。我编辑了我的问题并添加了解释图片。我还没有实现它,但我认为你有一个观点,这可能是正确(或唯一)的方法