如何获取box2d中的碰撞位置

发布于 2024-12-20 05:36:22 字数 139 浏览 0 评论 0原文

在 box2d 中获取碰撞点的最佳方法是什么?我将它与 cocos2d 和 Objective C 一起使用,但我认为该 API 在其他语言中是类似的。使用 b2ContactListener 类将生成 b2Contact 对象,但我找不到有关接触位置的任何信息。

What's the best way to get the point of collision in box2d. I'm using it with cocos2d and Objective C, but I imagine the API is similar in other languages. Using the b2ContactListener class will produce b2Contact objects, but I can't find any information on the contact position.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

や莫失莫忘 2024-12-27 05:36:22

您可以使用以下代码来获取碰撞点

b2Body *bodyA = contact->GetFixtureA()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();

if ((bodyA->GetFixtureList()->GetFilterData().categoryBits == Categorybits1 || bodyA->GetFixtureList()->GetFilterData().categoryBits == categoryBits2) && (bodyB->GetFixtureList()->GetFilterData().categoryBits == categoryBits2 || bodyB->GetFixtureList()->GetFilterData().categoryBits == Categorybits1)) 

您可以通过此代码获取身体位置......

即使我正在搜索如何获取碰撞点

You can use the following code to get the point of collision

b2Body *bodyA = contact->GetFixtureA()->GetBody();
b2Body *bodyB = contact->GetFixtureB()->GetBody();

if ((bodyA->GetFixtureList()->GetFilterData().categoryBits == Categorybits1 || bodyA->GetFixtureList()->GetFilterData().categoryBits == categoryBits2) && (bodyB->GetFixtureList()->GetFilterData().categoryBits == categoryBits2 || bodyB->GetFixtureList()->GetFilterData().categoryBits == Categorybits1)) 

You can get body positions through this code.....

even i am searching how to get point of collision

焚却相思 2024-12-27 05:36:22
try this method

OBJECT1_CATEGORY_BITS = 0x00000001;
OBJECT2_CATEGORY_BITS = 0x00000002;

void MyContactListener::PreSolve(b2Contact *contact, const b2Manifold
*oldManifold) 
{
    b2Fixture *fixtureA = contact->GetFixtureA();
    b2Fixture *fixtureB = contact->GetFixtureB();

    b2Filter filterA = fixtureA->GetFilterData();
    b2Filter filterB = fixtureB->GetFilterData();

    if ((filterB.categoryBits == OBJECT1_CATEGORY_BITS) && (filterA.categoryBits == OBJECT2_CATEGORY_BITS))
    {
        b2Vec2 normal = contact->GetManifold()->localNormal;

        NSLog(@"pointX : %f",normal.x);
        NSLog(@"pointY : %f",normal.y);
    } 
}
try this method

OBJECT1_CATEGORY_BITS = 0x00000001;
OBJECT2_CATEGORY_BITS = 0x00000002;

void MyContactListener::PreSolve(b2Contact *contact, const b2Manifold
*oldManifold) 
{
    b2Fixture *fixtureA = contact->GetFixtureA();
    b2Fixture *fixtureB = contact->GetFixtureB();

    b2Filter filterA = fixtureA->GetFilterData();
    b2Filter filterB = fixtureB->GetFilterData();

    if ((filterB.categoryBits == OBJECT1_CATEGORY_BITS) && (filterA.categoryBits == OBJECT2_CATEGORY_BITS))
    {
        b2Vec2 normal = contact->GetManifold()->localNormal;

        NSLog(@"pointX : %f",normal.x);
        NSLog(@"pointY : %f",normal.y);
    } 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文