【问题标题】:KineticJS: image.destroy() doesn't destroy the Kinetic.Image and group.destroy() causes an infinite loopKineticJS:image.destroy() 不会破坏 Kinetic.Image 并且 group.destroy() 会导致无限循环
【发布时间】:2014-05-03 22:54:50
【问题描述】:

过去几天我在 KineticJS 和我的 Web 应用程序中遇到了一个非常奇怪的问题:

一般来说,我的应用程序由几个“页面”组成,它们由Kinetic.Groups 表示。除一个之外的所有组都是偏移的,这意味着不可见。不可见的组都临时添加到单独的Kinetic.Layer(用于缓存等...),唯一可见的页面添加到另一个Kinetic.Layer以使其具有交互性。

所有页面(或Kinetic.Groups)都存储在一个数组中(因为没有固定数量),并按如下方式访问:activelayer.add(pages[1]);

到目前为止一切都很好,但是当我尝试像图像一样破坏Kinetic.Shape 时,它不会破坏图像,这意味着它仍然存在,可见且可交互。在下一步中,我想销毁整个“临时”Kinetic.Layer,这导致了无限循环并导致我的浏览器崩溃。

到目前为止,我已经调查了 KineticJS 的 destroy 函数,发现 go._removeID(this.getId());go._removeName(this.getName(), this.getId()); 函数只接收 undefined 值。

销毁与上述页面无关的层,没有任何问题。

非常感谢任何形式的帮助。

【问题讨论】:

  • 你在销毁对象后绘制图层了吗?这是一个常见的错误,它“看起来”好像什么都没有发生。另外,您是否为要销毁的物品设置了名称和/或 ID?这可能就是他们未定义的原因..
  • 感谢您的回复。是的,该层在销毁对象后重新绘制,不,我没有设置任何名称和/或 ID,但这不应该是问题,因为用于“查找”的每个对象的 KineticJS 内部 _id正确的形状,同时摧毁它。此外,如果我销毁一个形状,KineticJS 会返回该对象,该对象应该具有 undefined 值,因为它已被销毁。在我的情况下,它返回的形状及其所有属性,如 destroy-process 从未执行过。
  • 我的下一个猜测是您的 Kinetic.Shapes 没有正确存储到您的 activeLayer 数组中。您是否尝试过通过直接访问它的 ID 来破坏形状?你得到相同的结果吗?您如何引用要销毁的动力学对象?
  • 希望您现在已经追查了保留的引用,但如果没有,我们将需要一些代码来进行真正的分析。
  • 很遗憾,我没有时间检查保留的参考文献,但我会尽快通知您;)

标签: javascript html html5-canvas kineticjs


【解决方案1】:

您可能已多次添加图层。

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2011-08-23
    • 2019-08-22
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多