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

盒2D仅用于冲突检测

帅德惠
2023-03-14

我只使用Box2D进行碰撞检测。我的代码与Ray Wenderlich教程中的代码类似。

我遇到了这个方法的问题。由于代码绕过了Box2D模拟,因此没有碰撞响应。因此,精灵可以重叠。我知道Box2D冲突API提供了一个单位法向量来帮助解决冲突。然而,这个矢量传达的是方向,而不是大小。因此,我无法确定应该将重叠的sprites移动多远。有人知道如何使用Box2D冲突API手动解决重叠问题吗?

共有1个答案

唐煜
2023-03-14

我不知道iOS内容,但您想要做的是使用扩展b2ContactListener并覆盖Presolve。

void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);

如果设置Contact->SetEnabled(false),则会发生冲突,但不会对其执行操作。一旦发生冲突,您可以执行类似于下面的操作。

常量B2Manifold*manifold=Contact->GetManifold();

    if (manifold->m_pointCount == 0)
    {
        return;
    }

    b2Fixture* fixtureA = contact->GetFixtureA();
    b2Fixture* fixtureB = contact->GetFixtureB();

    b2PointState state1[b2_maxManifoldPoints], state2[b2_maxManifoldPoints];
    b2GetPointStates(state1, state2, oldManifold, manifold);

    b2WorldManifold worldManifold;
    contact->GetWorldManifold(&worldManifold);

    for (int32 i = 0; i < manifold->m_pointCount && m_pointCount < k_maxContactPoints; ++i)
    {
        ContactPoint* cp = m_points + m_pointCount;
        cp->fixtureA = fixtureA;
        cp->fixtureB = fixtureB;
        cp->position = worldManifold.m_points[i];
        cp->normal = worldManifold.m_normal;
        cp->state = state2[i];
        ++m_pointCount;
    } 
 类似资料:
  • 我可以实现AABB方法来检测碰撞,这很容易而且便宜,但我想实现OBB以获得更高的准确性,所以我创建了带有模型初始化的边界框,它由8个边界顶点和中心组成,每个帧我用转换矩阵转换所有顶点以适应定向边界框,但我无法理解检测两个OBB之间碰撞的方法,我无法理解找到一个简化而清晰的教程,用代码视角而不是数学来解释算法,因为我不是数学家。 如果我有 在模型初始化时,我创建了框 对于每一帧,我用模型的变换矩阵重

  • 我正在尝试为我的3D环境创建一个四叉树(所有元素都在平坦的地形上,因此它们可以用2D数据表示),但我对它的精细部分的实现有点迷路。 我将首先描述我当前的四叉树,然后讨论它的缺陷,然后提出问题。 我目前拥有的是一个四边形树,它接受一个非常具体的矩形,我在其中定义了x,z,宽度和前向。以下是我的操作概述。 将对象插入四元树: 检查当前节点是否有子节点。如果是,请检查对象是否能够完全适应四个节点中的任何

  • 我有一个2维数组叫做,也就是32x32。每个元素表示清除路径,表示墙。 窗口分辨率为800x800,这意味着

  • 嘿,我的游戏代码有问题。例如,有没有办法检查我的玩家sprite(英雄)右侧是否与obstacle_sprite组发生碰撞? 我只能弄清楚如何检查一般的碰撞,但如果玩家的右侧与障碍物相撞,我只想获得真正的输出。 在我的代码中,我使用一个隐形精灵作为hitbox,并将玩家吸引到这个隐形精灵中以检查碰撞,但使其看起来像障碍物拒绝玩家移动。

  • 下面的代码只是从屏幕顶部创建小正方形,然后移动到底部。我还有一个UIImageView(播放器),它由x轴上的加速计控制。目标不是接触动画对象。就像一个简单的比赛游戏。虽然我没有错误,但我无法检测到碰撞。我在代码中找不到错误。有什么问题吗?

  • 问题内容: 如何检测两个元素是否发生冲突? 这两个div是简单的彩色框,彼此垂直,因此没有复杂的形状或角度。 问题答案: 一般思路-获得框的偏移量和尺寸,并检查它们是否重叠。 如果要更新,可以使用: 另外,请注意,您可以针对特定示例优化功能。 因为它们是固定的,所以您不必重复读取框的尺寸(就像我在代码中一样)。您可以在页面加载时读取它们(将其读取到变量中),然后仅读取变量 小盒子的水平位置不会改变