- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
遇到物理体碰撞/接触未按我预期的方式工作的问题。我可能误解了它们应该如何工作。我的理解是,如果 physicsBodyA 的类别位掩码为 0x1,而 physicsBodyB 的接触测试位掩码为 0x1,则接触测试应该评估为真,我应该从事件调度程序获得回调。
然而,这是行不通的。使接触评估为真的唯一方法是我还设置 physicsBodyA 的接触位掩码以匹配 physicsBodyB 的类别位掩码。基本上,类别和接触测试位掩码必须相互镜像。在实践中它看起来像这样:
bool TestLayer::init() {
// Call super init
if (!Layer::init()) {
return false;
}
// Get screen size
Size visibleSize = Director::getInstance()->getVisibleSize();
// Bitmasks
int BITMASK_BOUNDARY = 0x1 << 0;
int BITMASK_HERO = 0x1 << 1;
// Boundary node
Node *boundaryNode = Node::create();
boundaryNode->setAnchorPoint(Point(0.5, 0.5));
boundaryNode->setPosition(Point(visibleSize.width/2.0, visibleSize.height/2.0));
// Physics body for boundary node
PhysicsBody *boundaryBody = PhysicsBody::createEdgeBox(visibleSize);
boundaryBody->setCategoryBitmask(BITMASK_BOUNDARY);
boundaryBody->setContactTestBitmask(BITMASK_HERO);
boundaryBody->setDynamic(false);
// Set boundary body and add to scene
boundaryNode->setPhysicsBody(boundaryBody);
this->addChild(boundaryNode);
// Hero node
Sprite *hero = Sprite::create("hero_ship.png");
hero->setPosition(Point(visibleSize.width/2.0, visibleSize.height - 30.0));
// Physics body for hero node
PhysicsBody *heroBody = PhysicsBody::createBox(hero->getContentSize());
heroBody->setCategoryBitmask(BITMASK_HERO);
// Set hero body and add to scene
hero->setPhysicsBody(heroBody);
this->addChild(hero);
/*
* NOTICE: If I don't set the contact test bitmask on my hero
* body, the event listener onContactBegin callback will not
* be called.
*/
heroBody->setContactTestBitmask(BITMASK_BOUNDARY);
// Create an event listener
EventListenerPhysicsContact *listener = EventListenerPhysicsContact::create();
// Use lambda for listener callback
listener->onContactBegin = [](PhysicsContact &contact) {
CCLOG("Physics contact began.");
return true;
};
// Register listener with event dispatcher
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
// Everything worked out on init, return true
return true;
}
最佳答案
来自 Box2D 手册:
-------- 引用
Collision filtering allows you to prevent collision between fixtures. For example, say you make a character that rides a bicycle. You want the bicycle to collide with the terrain and the character to collide with the terrain, but you don't want the character to collide with the bicycle (because they must overlap). Box2D supports such collision filtering using categories and groups. Box2D supports 16 collision categories. For each fixture you can specify which category it belongs to. You also specify what other categories this fixture can collide with. For example, you could specify in a multiplayer game that all players don't collide with each other and monsters don't collide with each other, but players and monsters should collide. This is done with masking bits. For example:
playerFixtureDef.filter.categoryBits = 0x0002;
monsterFixtureDef.filter.categoryBits = 0x0004;
playerFixtureDef.filter.maskBits = 0x0004;
monsterFixtureDef.filter.maskBits = 0x0002;
Here is the rule for a collision to occur:
uint16 catA = fixtureA.filter.categoryBits;
uint16 maskA = fixtureA.filter.maskBits;
uint16 catB = fixtureB.filter.categoryBits;
uint16 maskB = fixtureB.filter.maskBits;
if ((catA & maskB) != 0 && (catB & maskA) != 0)
{
// fixtures can collide
}
-------- 引用结束
所以最重要的是,如果您希望两个事物在碰撞方面以相同的方式相互 react ,那么它们都必须具有相同的类别和掩码位。
要对此进行更多(非常好的)深入讨论,请继续 look at this site (不,这不是我的)。
对于其他一些有趣的 Box2D 内容,look here (这是我的)。
关于android - Cocos2d-x v3.0rc1 PhysicsBody 接触问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22900147/
我在将 OALSimpleAudio 导入我的 Cocos 2.X 项目时遇到了很多麻烦。 该应用程序相当大。 我将 Cocos 3.0 导入现有项目的最佳方式是什么? 最终错误如下所示: 这是我到目
Tensorflows object_detection 项目的 labelmaps 包含 90 个类,虽然 COCO 只有 80 个类别。 因此参数num_classes在所有示例配置中设置为 90
我正在使用Cocos2d-x v3.9,并且在iOS模拟器中看到某些行为,该行为仅在执行命令cocos run -p mac时出现。如果我通过XCode构建项目,则不会看到相同的行为。 Cocos和X
我正在使用 Cocos creator 创建一个仅适用于网络浏览器的简单游戏,并且需要实现一个分享到 twiiter 按钮。但我需要用普通的 javascript 来做到这一点。到目前为止,我有这段代
在我的 appDelegate 类中,我有类似这样的代码, while using cocos studio auto glview = director->getOpenGLView();
我有一个渲染循环,我想在后台运行,以便我可以控制播放循环的速度,使其动画缓慢或快速。现在,每次我想使用 Sprite 时,我都会使用 sleep 并在主线程中的 CCRenderTexture 上调用
下面是我的 HelloWorld.h 类: class HelloWorld : public cocos2d::CCLayer { public: HelloWorld(); // Here's a
我想在 cocos 2d 中用手指触摸画线。 -(void) ccTouchesMoved:(NSSet *)inappropriateTouches withEvent:(UIEvent *)eve
我是 cocos creator 和 JavaScript 编程的新手,最近 cocos creator 在其引擎中添加了“集成 Box2D 物理引擎”。我想知道我是否可以使用 ' liquidFun
我能够使用下面的代码和 COCO API 过滤图像,我为我需要的所有类多次执行此代码,这是类别 person 的示例,我这样做了用于 car 等 我现在要做的,是过滤数据集(instances_tra
我一直在检查这个detr repository类别总数为 100,但其中 10 个是空字符串,如图所示 here . 这背后有什么特别的原因吗? 最佳答案 基本上,COCO 数据集在其发布之前已在一篇
对于一个项目,我需要一个可以检测许多不同物体的检测器。为此,COCO 的 90 个类是不够的,因为我希望能够看到更多。 例如,我已经看到 imagenet 有更多的类,但是我找不到训练来检测 imag
在我的一个 iPhone 应用程序中,我需要查明该设备是否有互联网连接。有人帮忙吗? 最佳答案 使用可达性类。 if([self checkInternetConnected] ) {
我想用 Delphi 编写一个简单的编译器用于教育目的。我读过 Coco/R 并发现了 Delphi 的这个实现:http://code.google.com/p/dcocor/ 。据我所知,这是 D
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this q
我正在尝试使用 https://github.com/jsbroks/coco-annotator 用 COCO 关键点注释图像以进行姿势估计。如安装部分所述,我克隆了存储库。我安装了 Docker
我正在使用 Mask-RCNN 并希望训练我自己的几类 coco 风格的数据集。一开始,我只有 2 个类(除了背景)。 虽然 Mask-RCNN 带有样本数据集,但它们要么只包含一个类,要么自己生成数
有谁知道如何更新Cocos 2D-x上的标签文本吗?我在cocos studio上创建了一个标签,现在我尝试通过我的代码访问和更改其内容。 我正在寻找 JavaScript 中的具体代码行,但我只在
我有一个 cocos2d-x 场景和上面的 Button。我尝试添加触摸事件监听器并为其提供回调函数: preloadScene.h: ... public: virtual void Do(Touc
我是cocos2d-js游戏开发的初学者,这两天正在学习。我尝试通过 cocos 命令运行我的项目,但它显示的 cocos 命令不被识别为内部或外部命令。我已按照此链接创建并运行项目 http://c
我是一名优秀的程序员,十分优秀!