博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bullet引擎碰撞事件中回调函数用法详解
阅读量:6227 次
发布时间:2019-06-21

本文共 1219 字,大约阅读时间需要 4 分钟。

作者 ssmimi
帖子地址 
在bullet中一个非常普遍的应用是 针对两个物体发生碰撞时调用开发者自己提供的回调函数
比如球体碰撞到另一个球体,发出声音
下面是一个例子, 场景中有3种物体 球(动态),地板(静态),墙壁(静态),球碰到墙和地板发出的声音不同,所以需要设置这三种对象为不同类别,利用 collisionobj的userpointer来完成。
int objclass[3] ={0,1,2};
boxBody->setUserPointer(&objclass[0]);
ground->setUserPointer(&objclass[1]);
wall->setUserPointer(&objclass[2]);
然后在update or render 中调用如下回调函数,主要的想法是从btPersistentManifold 中去获取当前narrowphase的碰撞对,但是要检查接触点,如果接触点大于0,则开始检查碰撞对象类别,根据类别再做 不同的动作。
例子视频  
代码 -(void) Collide_callback{
int type_obj1, type_obj2; int numManifolds = sDynamicsWorld->getDispatcher()->getNumManifolds(); for(int i=0;i
getDispatcher()->getManifoldByIndexInternal(i); int numContacts= contactManifold->getNumContacts(); if(numContacts>0) {
btCollisionObject * obA = static_cast
(contactManifold->getBody0()); btCollisionObject * obB = static_cast
(contactManifold->getBody1()); type_obj1 = * (int *)obA->getUserPointer(); type_obj2 = * (int *)obB->getUserPointer(); if((type_obj1==0)&&(type_obj2==1)) {
[g_ResManager playSound:@"test.caf"]; } if((type_obj1==0)&&(type_obj2==2)) {
[g_ResManager playSound:@"test.caf"]; } }   }   }
 

转载地址:http://vrtna.baihongyu.com/

你可能感兴趣的文章
你真的会玩SQL吗?无处不在的子查询
查看>>
更新SVN时提示要清理,但清理失败,乱码得解决方案
查看>>
Rich控件一
查看>>
授权对象的检查
查看>>
查询PO的预付款剩余金额
查看>>
poj 2485 -- Highways
查看>>
用python写一个抽奖程序
查看>>
npm使用入门(package.json)
查看>>
2014,微信是糖,甜到忧伤
查看>>
微信公众平台消息接口开发(12)消息接口Bug
查看>>
PHP获取毫秒时间戳,利用microtime()函数
查看>>
动态规划复习-HDU1231
查看>>
串门赛: NOIP2016模拟赛——By Marvolo 丢脸记
查看>>
Webapck项目开发基本构建及配置
查看>>
poj2562
查看>>
用matplotlib绘制图像
查看>>
flex 整理 笔记
查看>>
Cocos2d-x之瓦片地图 Tiled
查看>>
对网卡中断绑定的脚本
查看>>
Android第二次作业
查看>>