Cocos2d / Box2d CCribbon 碰撞检测

Posted

技术标签:

【中文标题】Cocos2d / Box2d CCribbon 碰撞检测【英文标题】:Cocos2d / Box2d CCRibbon Collision Detection 【发布时间】:2011-06-10 17:58:30 【问题描述】:

我正在使用 cocos2d+box2d 作为游戏引擎在 ios 上开发一款游戏,并尝试添加一个我知道如何操作的 CCRibbon(其中的点被触摸填充),并获得 CCRibbon 的形状链接到 box2d,所以当一个物体与它碰撞时(由于重力),它会像正常物体一样反弹。有人会碰巧知道如何做到这一点/给我替代方案吗? 非常感谢, 亚历山大·卡萨涅

【问题讨论】:

【参考方案1】:

获取每个点并使用点 + 调整创建一个薄的静态矩形 box2d 多边形,使其成为一个形状。

for (int i = 0; i < ccribbon.points.length - 1; i++)

    int j = i;
    j++;
    int width = 2;

    Array ar = [];
    ar[0] = new b2Vec2(ccribbon.points[i].x, ccribbon.points[i].y);
    ar[1] = new b2Vec2(ccribbon.points[i].x + width, ccribbon.points[i].y + width);
    ar[2] = new b2Vec2(ccribbon.points[j].x, ccribbon.points[j].y);
    ar[3] = new b2Vec2(ccribbon.points[j].x + width, ccribbon.points[j].y + width);

    //create new static object
    b2Polygon b2p = new b2Polygon();
    b2p.setAsArray(ar);

    //do rest to add it to world etc.


当然不要完全复制该代码,它只是根据我的记忆,我也确信它是 C# 和 Actionscript 3 的组合。它不是那么伪代码,有很多你需要填写的空白in. 为什么有 cmets :P.

不过,这基本上就是我的做法。我的经验只是在 box2d for flash 中。

【讨论】:

谢谢,我会尝试然后接受您的回答。我会尝试“移植”它,因为它是用于 ObjectiveC 的;)【参考方案2】:

你读过这个吗....http://www.raywenderlich.com/606/how-to-use-box2d-for-just-collision-detection-with-cocos2d-iphone

【讨论】:

我有...确实要创建预先确定的简单精灵(盒子、球等...),确定形状(正方形、圆形等...)相当简单)。但是,无法访问 CCRibbon 的形状。没有点,我无法创建形状。没有形状,我无法创建夹具。无论如何,谢谢,亚历山大卡萨涅 这真的很好,但问题是它不是动态的。无论如何都没有动态地采用任何 cocos2d 形状并将其转换为 box2d 形状吗? 对不起..我没有检查动态体...可能在他们的文档中你可以找到 我希望,但是如果你明白我的意思的话,Cocos2d 的文档是相当糟糕的 :)

以上是关于Cocos2d / Box2d CCribbon 碰撞检测的主要内容,如果未能解决你的问题,请参考以下文章

单面平台(Box2D/Cocos2D)

重置精灵 - Box2d(Cocos2d)

Box2d 接触式传感器 COCOS2D

炸弹 - Cocos2d/Box2d

创建身体 - Cocos2d/Box2d

边缘 - Cocos2d/Box2D