我正在开发一款cocos2d-x游戏(3.8版本)。我的游戏使用的是花栗鼠物理,它有一个像中断器一样工作的静态体。当另一个物体在它上面时启用此中断器。当主体彼此分离时,中断器被禁用。
我想:
我的第一种方法是实现onContactBegin方法。当这两具尸体接触时,我会返回假。这样,身体就会穿过中断器并且不会反弹。
问题是没有调用onContactSeparate方法,因为没有发生联系。
如果我在onContactBegin方法中返回true,则调用onContactSeparate并且我可以检测到它。问题是身体没有穿过阻断器,它会反弹。
[编辑]更多信息
这是两个精灵分开的场景。球可以移动,中断器是静止的身体。球可能会超过中断者。
这是两个精灵接触并且object1(球)在中断器上的情况。我想检测两个精灵彼此分开的位置。
任何帮助将不胜感激!
答案 0 :(得分:1)
在我看来,你在科科斯中使用的是Box2D,所以我将以此作为我的基本假设。
这就是我要做的。
(可选)如果您希望中断区域根据您分配给它的假身体移动,您可以使用以下内容在步骤功能之后更新它。 / p>
world->Step(delta, 10, 10);
for (auto physicsBody = _world->GetBodyList(); physicsBody; physicsBody = physicsBody->GetNext())
{
auto userData = static_cast<Node*>(physicsBody->GetUserData());
if(userData != NULL)
{
// Set interruptor area rectangle = physicsBody->GetPosition();
}
}
为了让系统的其余部分知道我何时离开中断器,我会在发生这种情况时存储一个函数指针指向我要调用的函数。当一个对象进入中断区域时,我会标记它说& #34;我在该地区&#34;在那之后,当你不再在该区域时,你得到的第一个更新步骤我将触发回调并重置我曾经达到的标志。
我希望这会有所帮助。你没有给出你想做的事情的大量背景,图像会有所帮助。特别是在寻找具有可视化表示的代码的帮助时。
[修改强>] 基于您想要的行为,这就是我这样做的方式。首先要知道的是,您不需要物理碰撞来实现您想要的行为。您可以通过使用边界框交叉测试来执行此操作,并使用标记和回调来确定其余部分。
我有一个知道球和中断节点的对象。在这个对象的更新循环中,我检查两个是否相交。我设置了一个标志,表示&#34;我在中断器中#34;,我不在中断器中的下一帧,我的标志仍然是真的我调用我分配给我的功能&#34;离开逻辑&#34;在其中,然后将标志设置为false。