cocos2dx关于物理引擎碰撞和接触设置问题;
cocos2dx关于物理引擎碰撞和接触设置问题; box2d和cocos2d-x3.2自带的物理引擎都适用; 3。碰撞设置的三个函数: (1) setGroup(1); 1. 用body调用是设置这个body上所有的shape;shape上调用,是设置单个shape; 2. 同组,总是相碰;不管后面的掩码怎么设置; 3. 不同组,相不相碰要看掩码; 优先级高于碰撞掩码; sp2->getPhysicsBody()->setGroup(1); sp3->getPhysicsBody()->setGroup(2); (2)掩码三个函数; (检测碰撞和检测触发函数两个作用); 默认情况,这3个都设置成FF; sp3->getPhysicsBody()->setCategoryBitmask(0x01);// 种类 sp3->getPhysicsBody()->setCollisionBitmask(0x02);// 碰撞 (不可穿透) sp3->getPhysicsBody()->setContactTestBitmask(0x01);//接触 (触发检测函数);
两个精灵: 0001&0010 为0; (只有1&1才是1); 1. 两种状态:碰撞 (不可穿透)和接触 (触发检测函数); 2. 运算; 要算碰撞;碰撞值和对方的种类值运算跟接触无关; 要算接触,接触价和对方的种类值运算; 3.种类设置成0;和任何都没碰撞,跑出边界外; 4. 种类与碰撞:1碰撞,0不碰撞; 如: 种类01,碰撞02; 结果不碰撞; 5. 种类与接触:1触发碰撞检测,如: 种类01,接触02; 结果不检测;
(3) 两个精灵设置成不同的; A的种类与B的碰撞;B的种类与A的碰撞;只要有一个不为1就不会碰撞; 如: A->setCategoryBitmask(1);// 种类 A->setCollisionBitmask(5);// 碰撞 B->setCategoryBitmask(1);// 种类 B->setCollisionBitmask(2);// 碰撞
A的种类与B的接触;B的种类与A的接触;只要有一个不为1就不会检测; A->setCategoryBitmask(5);// 种类 A->setContactTestBitmask(1);//接触 B->setCategoryBitmask(2);// 种类 B->setContactTestBitmask(4);//接触
(4)使用技巧: 一般使用2的N次方的数,种类会少些;设成相同的就碰撞或接触;
1.不想碰撞;碰撞值设成一个2的N次方的数,其它的比它小就行; shape1->setCategoryBitmask(2); // 种类 shape1->setCollisionBitmask(64); // 碰撞 shap1->setContactTestBitmask(8);//接触
2.不想接触; 接触值设成一个2的N次方的数,其它的比它小就行; shape2->setCategoryBitmask(2); // 种类 shape2->setCollisionBitmask(8);// 碰撞 shape2->setContactTestBitmask(64); //接触
3.要碰撞;直接对调两个SHAPE的种类值和碰撞值; 多个不同shape的时候非常有用; 接触也是一样;
例:A类精灵有两个SHAPE; B类精灵有两个SHAPE; A1只和B2碰撞;B1只和A2碰撞; 其它的都不碰撞; 1)A类的精灵之间,精灵里的SHAPE间不碰撞,就用不同的2的N次方的数; shapeA1->setCategoryBitmask(2); // 种类 shapeA1->setCollisionBitmask(4); // 碰撞 shapeA1->setContactTestBitmask(64);//接触
shapeA2->setCategoryBitmask(16); // 种类 shapeA2->setCollisionBitmask(8); // 碰撞 shapeA2->setContactTestBitmask(64);//接触
2) 直接对调两个SHAPE的种类值和碰撞值; A1只和B2;B1只和A2 shapeB1->setCategoryBitmask(8); // 种类 shapeB1->setCollisionBitmask(16); // 碰撞 shapeB1->setContactTestBitmask(64);//接触
shapeB2->setCategoryBitmask(4); // 种类 shapeB2->setCollisionBitmask(2); // 碰撞 shapeB2->setContactTestBitmask(64);//接触 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 正则表达式
- 最近刚在 sourceforge 上发布 velocityweb 0.9 版本
- c# – 在.NET 4中实现RegEx超时
- React Native 轻松集成分享功能(Android 篇)
- SQLLite (二) :sqlite3_open, sqlite3_exec, slite3_close
- NoSQL数据库学习笔记之 NoSQL百家争鸣
- objective-c – 加载新视图或不同控制器的UIPageControl
- FlexBuilder安装和HelloWorld例子
- Swift基础语法: 21 - Swift的可变形形参, 常量形参, 变量形
- PostgreSQL中BRIN和BTREE索引的比较(一)