开启射线检测报错 Error at b2GrowableStack.Pop

  • Creator 版本: 3.5.1

  • 目标平台: google chorme

  • 重现方式:

  • 首个报错:

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率: 100%

创建一个节点,节点添加RigidBody2D和碰撞PolygonCollider2D,在raycast检测到节点后,在下一次射线检测中,我不想再次检测到节点,所以设置polygonCollider.enabled = false;然后报错:box2d.umd.js:1419 Uncaught Error
at b2GrowableStack.Pop (box2d.umd.js:1419:15)
at b2DynamicTree.RayCast (box2d.umd.js:2881:34)
at b2BroadPhase.RayCast (box2d.umd.js:3663:23)
at b2World._RayCast (box2d.umd.js:19904:46)
at b2World.RayCast (box2d.umd.js:19893:20)
at b2PhysicsWorld.raycast (physics-world.ts:146:21)
at PhysicsSystem2D.raycast (physics-system.ts:330:34)
at GameScene.raycastFruit (GameScene.ts:146:50)
at GameScene.onTouchEnd (GameScene.ts:59:14)
at CallbacksInvoker.emit (callbacks-invoker.ts:344:34)
后面我试过destroy();但是还是报这个错误,我直接在编辑器上不添加节点,但是检测还是报错。
这是怎么回事?应该是检测中没有获取到盒子,但是我都polygonCollider.enabled = false;甚至节点都销毁了,怎么还会这样?
节点active=false;检测哪都报错
我节点都不添加了,直接调用PhysicsSystem2D.instance.raycast(startPoint, endPoint, ERaycast2DType.All);也报错。这不懂啊

求教大神,出现这个没法继续走下去。


bug是在游戏中只有一个fruit的时候,被切,隐藏。然后再次检测就报错了。也就是在程序中,没有active=true的碰撞体节点。

b2GrowableStack.Pop (box2d.umd.js:1419:15)
这个box2d.umd.js文件我在引擎中找到了。但是我修改引擎文件,调试时并没有修改成功,请问应该怎么修改调试?
box2d.umd.js路径:D:\cocoscreator\CocosDashboard\resources.editors\Creator\3.5.1\resources\resources\3d\engine\node_modules@cocos\box2d\build\box2d/box2d.umd.js

@Cocos 引擎,请教下
D:\cocoscreator\CocosDashboard\resources.editors\Creator\3.5.1\resources\resources\3d\engine\node_modules@cocos\box2d\src\common\b2_growable_stack.js
D:\cocoscreator\CocosDashboard\resources.editors\Creator\3.5.1\resources\resources\3d\engine\node_modules@cocos\box2d\src\common\b2_growable_stack.ts
两个相同名字的文件。都找到了pop函数。但是修改不了。

函数:
public Pop(): T {

// DEBUG: b2Assert(this.m_count > 0);

this.m_count--;

const element: T | null = this.m_stack[this.m_count];

this.m_stack[this.m_count] = null;

if (element === null) { throw new Error(); }

return element;

}

我猜测是没有活动的碰撞体,走了throw new Error(); 但是我调试不了这个pop函数。

我也遇到了,,楼主怎么解决的呢

我放了一个刚体在屏幕外,不参与任何活动,只要存在一个刚体,就不会报错

3.8.2 也有这个问题,也是外面放一个就可以了

3.8.4也是一样