Cocos Creator 2.0 怎么动态修改分组

  • Creator 版本: Cocos Creator v2.0.10

  • 目标平台: Google Chrome 浏览器

  • 详细报错信息,包含调用堆栈:
    rect.js:25 Uncaught TypeError: Cannot set property ‘group’ of undefined
    at rect.onCollisionEnter (rect.js:25)
    at CCClass._doCollide (CCCollisionManager.js:211)
    at CCClass.update (CCCollisionManager.js:173)
    at 33.cc.Scheduler.update (CCScheduler.js:413)
    at 28.cc.Director.mainLoop (CCDirector.js:945)
    at callback (CCGame.js:639)

这是在rect.js 里的碰撞反馈函数, 是挂载在预制体上的

/** * 当碰撞产生的时候调用 */ onCollisionEnter(other, self) { this.node.dispatchEvent(new cc.Event.EventCustom('foobar', true)); /** * 发生碰撞后, 碰撞体自身停止碰撞属性 */ self.colliderNode.group = "box"; console.log("成功碰撞"); },

这是分组,
我想实现的就是, 俄罗斯方块在掉落的过程中, 发生碰撞后, 小方块停止下落, 然后切换分组,
请问我的问题出在哪里, 还有没有其他的解决方案呢?

self.node.group = “box”;
应该是这样吧,node而不是colliderNode;节点默认不是都有个"default",切为"default",你这个应该切为block吧,停止检测碰撞

1赞

直接切不会生效,你这样做。

node.active = false;
node.group = "你要切的组";
node.active = true;
1赞

` onCollisionEnter(other, self){

    self.node.active = false; 
    self.node.group = 'neutral'; //将该方块重新分到中立组
    self.node.active = true;
    
    this.node.dispatchEvent(new cc.Event.EventCustom('msg', true));

    console.log("成功碰撞 !");
},`

好像没有效果诶

请问是我操作的不对么? 为什么我这样切换了没有生效呢?

对照一下我demo里是怎么用的。

1. A、B、C 都能与自生碰撞
2. A  能与    C 碰撞
3. B  不能与  C 碰撞
4. A  能与    B 碰撞(碰撞之后A改变group为B)

contact_group_demo.zip (774.3 KB)

请问解决了吗,动态修改碰撞分组

搁帧调用试一下

1赞

今天遇到这个问题,按照上面说的,
self.node.active = false;
self.node.group = ‘neutral’; //将该方块重新分到中立组
self.node.active = true;
然后成功了,物理模块的,
谁知道原因,留言咯··

最好不要用这种方法改变分组,会导致改变分组的物体卡顿一下

真想用,把改变分组的代码放到false和true的前边,百分百成功