Articles of 冲突解决

如何在实体组件系统中实现空间分区?

我的系统在组件上工作,而不需要任何关于实体的事情。 我想实现简单的网格划分,所以每个实体将根据其当前位置被赋予一个单元格。 但是系统如何知道哪些组件要更新? 例如:CollisionSystem必须检查单元内的每个组件之间的碰撞,但CollisionComponents必须以某种方式附加到网格上,以便系统知道要testing哪个碰撞,这似乎不是一个好的解决scheme。 我该怎么办?

3D库仑摩擦 – 使用碰撞冲量来计算摩擦力?

我一直在使用这个文件来学习如何实现一个非常基本的物理引擎。 第55-56页的库仑摩擦部分(标记为43-44页)使我感到困惑。 它观察到摩擦力可以使用碰撞冲量( jr )来计算。 这似乎很奇怪。 设想一个物体很快落在一个稍微倾斜的平面上。 如果物体沿着斜面向下滚动,则物体将沿相反的方向旋转。 当物体接触时,沿着切线有一个小的速度,但有一个巨大的正常冲量( jr )。 这将导致沿着与运动方向相反的切线( t hat )产生非常大的速度变化。 这将沿着表面推动物体(不好!)以一个显着的力量。 我的实现证实了这一点。 有人能向我解释这一切是如何融合在一起的吗? 我很困惑。 PS我不认为在这里提供一个我的实现的例子是相关的,要么我解释的影响不能发生(在这种情况下,有一个错误,我可以find自己),或者我误解了方程在这种情况下,实施本质上是打破的

球与矩形之间的碰撞testing

需要帮助与球和rect之间的碰撞。 我不知道如何testing球是从顶部,底部,右侧还是左侧击中logging。 x = ball x y = ball y radius = ball width and height rx = rect x ry = rect y rheight = rect height rwidth = rect width main game loop: x += dx; //keep the ball moving so i can test the collision y += dy; //collsion between ball and […]

如何使人物碰撞时不能通过其他随机移动的物体?

正如上面的标题,我怎样才能使我的随机wallImg足够坚实,使我的birdImg不能通过wallImg任何一方通过它? 这是Processing的Crappy Bird的代码,我已经改变了,所以我的游戏将颠倒而不是sidescrolling。 任何帮助将不胜感激 PImage backImg; PImage birdImg; PImage wallImg; PImage startImg; int gamestate = 1; int score = 0; int highScore = 0; float speed; boolean moveLeft, moveRight, moveUp, moveDown; int x = -200; int y; int vy = 0; int wx[] = new int[2]; int wy[] = new int[2]; //initiate and declare Bird […]

解决多个穿透vector的方法(3D)

我目前正在做OBB与OBB /三角形碰撞解决scheme。 我知道我得到的渗透向量是正确的。 我目前通过从物体的速度中减去它们来解决穿透vector,然后沿着新的速度移动物体。 这对一个单一的渗透vector完美的作品; 然而,如果有两个穿透vector沿着某个轴指向不同的方向,那么一个物体最终可能会穿过物体。 我的当前多重渗透向量分辨率的伪代码: Vector finalPenetrationVector = new Vector(0, 0, 0); for(int i = 0; i < penetrationVectors.size(); i++) { Vector v = penetrationVectors.get(i); if(finalPenetrationVector.x >= 0 && vx >= 0) finalPenetrationVector.x = /*The larger of the two.*/; else if(finalPenetrationVector.x <= 0 && vx <= 0) finalPenetrationVector.x = /*The smaller of the […]

在体素碰撞中的滑动效果

我正在制作一个体素引擎,我试图找出正确的方式来与幻灯片响应进行高效的碰撞(让播放器在墙上滑动)。 目前我的碰撞非常简单:如果更新后,玩家包围盒碰撞体素世界,那么我们只是取消碰撞。 我已经看到了这个答案 ,但我不明白回答者在这里的含义。 由于体素是一个单一的单位,我怎样才能计算其正常? 我应该将围绕体素的3x3x3块映射到预先计算的正常值? 取碰撞体素的单位表面法线(向外指向)。

在实体系统中定义碰撞响应

我正在构建一个非常简单的自上而下的2D射击游戏,它使用了一个实体组件模式。 我已经添加了几个不同的实体到一个级别,并给他们不同的碰撞组。 我有一个实体来代表传送者(分配给碰撞组A),一个玩家实体(B组)和一群敌人(C组)。 我知道实际的碰撞响应应该在碰撞系统中根据碰撞实体所属的组来决定。 我无法弄清楚如何定义碰撞的细节。 例如,如果一个玩家与一个传送器发生冲突,我需要将玩家移动到关卡上。 我在哪里存储目标位置? 我假设在传送器上的一个组件。 我应该为这些数据创建一个全新的组件吗? 我觉得它应该存储在传送器碰撞组件中,但是并不是所有使用碰撞组件的实体都需要这个数据。 有人可以请尝试开导我吗? 谢谢

实体组件系统中的碰撞响应

这个问题似乎是我的一个重复,但我不认为这是问题。 我试图用ECS来构建一个游戏,但是我希望这个ECS尽可能简单,所以我在回避消息。 我的问题是这些行为应该在哪里进行碰撞响应。 不是身体的反应,而是合理的反应(例如子弹伤害玩家,玩家拿起健康,爆炸摧毁敌人)。 是否有一个大的HandleCollisionsSystem,或每种types的碰撞都有自己的系统,或者逻辑是否在碰撞实体的一个或两个组件中(但是一个组件只是数据,对不对?) 我确信有几种方法,但是现在我想在简单的方面犯错。

应以何种顺序解决冲突?

我正在创建我的2D游戏引擎,我需要知道是否应先移动所有对象,然后解决与所有对象的碰撞,或者我应该逐个移动并解决碰撞对象。

如何解决涉及两个以上对象的碰撞?

我有计算重叠的多面体,接触点,穿透深度(DOP)等两个凸多面体物体重叠的工作函数。 我知道如何解决两个碰撞的可移动物体之间的碰撞,例如通过沿穿透法线移动其中一个DOP单元。 问题:什么是解决超过两个对象之间的冲突的简单方法? 例如,假设对象A,B和C处于碰撞状态,使得A与B重叠,并且B与C重叠。如果我移动A以解决与B的碰撞,那么A可能与C(或其他任何其他对象现场),现在如果我解决了A和C之间的冲突,其中一个可能与另一个对象重叠。 对我来说,这似乎是一个无尽的连锁效应。 是否有任何标准的algorithm来同时解决两个以上的对象之间的冲突(批量冲突解决),使得在一天结束时,没有对象重叠? 注意:在我的问题陈述中,假设一个场景最初被填充了可能与凸多面体形状重叠的对象,这个场景被赋予了我的碰撞parsing器引擎。