关于粒子销毁时报错问题

Cesium源码 · sogrey · 于 2个月前 发布 · 509 次阅读

我在场景中添加了粒子ParticleSystem,在执行销毁动作时(fireSystem.destroy();)报如下错误,有大神知道什么原因吗?

Cesium.js:250174 An error occurred while rendering.  Rendering has stopped.
undefined
DeveloperError: This object was destroyed, i.e., destroy() was called.
Error
    at new DeveloperError (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:82:23)
    at ParticleSystem.throwOnDestroyed (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:29012:23)
    at PrimitiveCollection.update (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:131007:31)
    at updateAndRenderPrimitives (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:237258:31)
    at executeCommandsInViewport (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:237092:17)
    at Scene.updateAndExecuteCommands (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:236900:17)
    at render (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:237563:19)
    at tryAndCatchError (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:237582:17)
    at Scene.render (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:237657:17)
    at CesiumWidget.render (http://127.0.0.1:8080/libs/cesium/Build/CesiumUnminified/Cesium.js:250222:29)

不想使用自动销毁,因为我也不知这把火会烧多久,只有灭火的信号一到,才能去移除它,我目前使用 show=false;不让他显示,但这并不是我想要的,想用事件去移除它,信号一到就删除它。

共收到 11 条回复 cesium
admin#12个月前 0 个赞

这个错误的意思好像是在你执行以前,你的粒子系统已经自动销毁了。

sogrey#22个月前 0 个赞

@admin [#1楼](#comment1) 感觉似乎不是,我销毁前还判断了.isDestroyed()

if (ps && ps instanceof Cesium.ParticleSystem && !ps.isDestroyed()) {
    // ps.destroy();//DeveloperError: This object was destroyed, i.e., destroy() was called.
    ps.show = false;
}
sogrey#32个月前 1 个赞

在官方示例上做销毁操作依然同样问题,不知道为什么。

目前找到一个办法:

_viewer.scene.primitives.remove(primitive) → Boolean

既然销毁不行就做移除操作。实测有效,对象被移除了。

ordinary#42个月前 0 个赞

请问楼主你解决了嘛,我也遇到了同样的问题,然后我的例子出现一下就没了。

sogrey#52个月前 0 个赞

@ordinary [#4楼](#comment4)

就是上面说到的移除掉它:

_viewer.scene.primitives.remove(primitive) → Boolean

参考文档:https://cesium.com/docs/cesiumjs-ref-doc/PrimitiveCollection.html?classFilter=PrimitiveCollection#remove

这是我记录的笔记

admin#62个月前 0 个赞

@sogrey #5楼

如果你有线上的博客,也可以发出来,加个友链,推广一下。

sogrey#72个月前 0 个赞

@admin [#6楼](#comment6)

自己学习随手记,已加

https://sogrey.top/Cesium-start/

sogrey#92个月前 0 个赞

@admin #8楼

哇哦,竟然推荐我的,有点受宠啊。

admin#102个月前 0 个赞

@sogrey #9楼

客气啦,您非常厉害啊

sogrey#112个月前 0 个赞

@admin #10楼

Cesium 我也是刚入门,之前是做Three.js的,理解起来可能容易些。

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics