2个机构之间的子弹碰撞回调

 z苏苏575 发布于 2023-02-13 17:34

我有2个物体,一个球体和一个盒子,当一个物体碰撞另一个物体时,它会做一些动作(即破坏盒子).

我尝试了几种方法:

checkCollideWith始终返回true;

contactPairTest - 我不明白该怎么用.它需要3个参数,2个对象和一个回调.我认为回调可以是我的代码中的任何函数,但它不能像那样工作.

有人可以举例说明如何调用方法,例如CollissionResult(),当2 btRigidBodies碰撞时(即bodyA和bodyB)?

1 个回答
  • 也许这个例子将有助于解释这个概念.您必须定义一个从现有抽象类派生的新类.您可以使用回调代码覆盖其中一个抽象类方法.然后,您可以创建派生类的对象,并将其传递给要调用回调的函数.这是一种常见的C++技术.

    struct MyContactResultCallback : public ContactResultCallback
    {
        btScalar addSingleResult(btManifoldPoint& cp,
            const btCollisionObjectWrapper* colObj0Wrap,
            int partId0,
            int index0,
            const btCollisionObjectWrapper* colObj1Wrap,
            int partId1,
            in index1)
        {
            // your callback code here
        }
    };
    
    MyContactResultCallback callback;
    world.contactPairTest(bodyA, bodyB, callback);
    

    我应该补充一点,关于这个库我没什么.我刚刚阅读了文档.

    编辑

    显示如何添加上下文成员MyContactResultCallback.

    struct MyContactResultCallback : public ContactResultCallback
    {
        MyContactResultCallback(some_type* ptr) : context(ptr) {}
    
        btScalar addSingleResult(btManifoldPoint& cp,
            const btCollisionObjectWrapper* colObj0Wrap,
            int partId0,
            int index0,
            const btCollisionObjectWrapper* colObj1Wrap,
            int partId1,
            in index1)
        {
            context->currentPoints += 10;
        }
    
        some_type* context;
    };
    
    MyContactResultCallback callback(ptr_to_some_object);
    world.contactPairTest(bodyA, bodyB, callback);
    

    ptr_to_some_object是指向要增加的对象的指针currentPoints.我不知道是什么类型的对象,所以我刚才说过some_type,你可以用真正的类型代替它.

    这是将对象用作回调而不是函数的关键.如果回调是一个对象,您可以根据需要为其添加数据成员,但不能对函数执行此操作.

    2023-02-13 17:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有