【问题标题】:Recognize contact only on bottom of circle. Cocos2d with Box2d仅识别圆圈底部的接触。 Cocos2d 与 Box2d
【发布时间】:2011-10-31 12:01:43
【问题描述】:

我正在使用 Cocos2d 和 Box2d 为 iPad 和 iPhone 制作平台游戏。 我正在为跳跃添加一些特殊功能,我需要知道我的角色何时应该允许跳跃。

目前我正在使用 ContactManager 来检查玩家(一个圆圈)和其他对象之间的碰撞。这样我就可以告诉我的角色只有在接触到另一个物体时才允许他跳跃。

问题是我不希望他能从墙上跳下来... 我想知道我的角色是否与我圈子底部的另一个物体接触!他应该只有在他的脚着地时才能跳跃。不是他的脸……

我应该如何处理这个问题?

【问题讨论】:

  • 检查触点是否在字符底部?
  • 是的。我想知道角色是否“站起来”……

标签: iphone ipad cocos2d-iphone box2d


【解决方案1】:

您可以在角色底部安装一个小型传感器固定装置并检查是否与它发生碰撞。 http://www.iforce2d.net/b2dtut/jumpability

【讨论】:

    【解决方案2】:

    您可以像这样获取联系人列表:

    b2Manifold* manifold = contact->GetManifold();
    for (int i = 0; i < manifold.pointCount; i++)
    {
       b2ManifoldPoint point = manifold.points[i];
       // rest see text …
    }
    

    现在理论上,您需要做的就是检查您的玩家圈子的最底部区域是否至少有一个点。这意味着如果一个接触点的 x 位置在大约正/负半圆半径的范围内,并且 y 位置小于圆体的 y 位置,那么您在地面某处与圆发生碰撞。

    【讨论】:

    • 非常感谢!我会尽快试试这个。
    • 对不起。我没有让这个工作。如何继续获得 b2body 的正确位置、宽度和高度?
    • b2Body* bodyA = contact->GetFixtureA()->GetBody(); bodyB 也一样。然后,您可以使用身体的属性,如位置等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多