浏览器报错提示
这样写不是只destroy一次吗?
深夜手动置顶
先回复一下你的疑问。
另外
因为物理碰撞还在计算,你这个时候把节点删除 导致了box2d野指针就报错了,因此要删除的话还是等碰撞结束。
2赞
node.isValid判断一下
在哪里判断?如果是在onBeginContact方法里就还是会报一样的错
这种问题 就是碰撞还在运行,你把组件销毁了造成的。只要销毁前先把碰撞组件的enabled关掉就好了
简单明了,理解了,但是destroy应该写在哪里呢?这样写还是报一样的错
onBeginContact(selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null){
otherCollider.enabled=false
otherCollider.node.destroy()
}
感谢,明白原因了,但是如果我需要一碰撞就消失,就只能像这个帖子一样用setTimeOut这个方法,按设定时间延迟销毁节点了吗?碰撞计算是什么时候结束的呢?有回调吗?
node.isVaild 和 cc.isValid() 不太一样。
使用 cc.isValid 需要
import { isValid } from ‘cc’;
if (isValid(this.node)) {
}
1赞
你好,你可以提取一个 demo 给我们,我们看一下你的使用方法是否正确。
可以这样判断 if(!node || node.name == ‘’) return;
destroy之后,isValid在下一帧才会返回你预期的结果。
你的需求最简单的实现方式就是加个自定义的字段,然后调用方法之前判断一下。
根据你的描述,立即“消失”不是立即“销毁”,先用node.active=false; 再延时destroy即可
其他版本也都有类似问题么