cocos 斗地主开发

小白想开发个斗地主,请教大佬一个问题。
点击出牌按钮,手中的牌打出后,怎么减少手牌数量呢。
我手牌是用layout组件放的。我是想根据node.children[i].destroy方法实现,可这种方法只能实现一次,
第二次出牌的时候,就会报异常,我猜是空指针的问题。

第二次这个i的值是否发生改变

destroy完之后,children这个数组大小是不变的,但是再执行一次函数,children这个数组的大小就会改变,这应该跟destroy的机制有关系。所以,索引i的值是发生改变了。所以现在怎么实现这个功能,我有些困惑,我想到的解决办法是遍历,根据组件属性值删除节点,但是我不知道会不会影响性能了点,所以我想问问有没有前辈知道这个功能,看看是不是我从一开始就想错了

你把每张牌当作个对象 放到容器中,每次出牌就可以从容器里面移除 通过牌的值去移除就行了呗

对象池 兄弟

1赞

不懂原因就变通一下,不要用children,自己新建个数组,new添加数组,remove移除数组,自己管理不更好么

3赞

你destroy了和数组又没关系,你需要从数组里把当前destroy的节点同样移除

直接全部摆上去 牌减少了 就把少得牌隐藏了

1赞

隐藏的话,剩下的会在layout组件里自动排列吗?

……后来我忘了我发了贴,感谢各位大佬,我后来的解决方案是动态创建数组。

牌这种频繁创建销毁的东西,最好还是用对象池,nodepool里面用的是removefromparent不会有children数组下一帧才变化的问题,既避免了destroy的缺点又有对象池的性能优势

受教了,感谢大佬:pray: