cocos2dx关于物理引擎碰撞和接触设置问题;

cocos2dx关于物理引擎碰撞和接触设置问题;,第1张

概述cocos2dx关于物理引擎碰撞接触设置问题; box2d和cocos2d-x3.2自带的物理引擎都适用; 3。碰撞设置的三个函数: (1) setGroup(1); 1. 用body调用是设置这个body上所有的shape;  shape上调用,是设置单个shape; 2. 同组,总是相碰;不管后面的掩码怎么设置; 3. 不同组,相不相碰要看掩码; 优先级高于碰撞掩码; sp2->getPhy

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);//接触

总结

以上是内存溢出为你收集整理的cocos2dx关于物理引擎碰撞和接触设置问题;全部内容,希望文章能够帮你解决cocos2dx关于物理引擎碰撞和接触设置问题;所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1046914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存