【问题标题】:How to clean part of layer with KineticJS?如何用 KineticJS 清理部分图层?
【发布时间】:2014-01-31 18:23:48
【问题描述】:

我正在使用 kineticJS 开发绘图工具。有一个问题。我无法清理部分图层。绘制算法:画一条线,用橡皮擦干净,然后继续绘制。然后层的所有干净部分都消失了。它们充满了,就像使用橡胶之前一样。

Demo

Code: erase

Code: draw

【问题讨论】:

    标签: javascript canvas kineticjs erase


    【解决方案1】:

    layer.clear(x,y,width,height) 将使用 context.clearRect(x,y,width,height) 清除画布。

    但请记住,Kinetic 对象会被保留,因此之前在该画布上的任何对象都将自动重绘。

    这就是为什么即使在 layer.clear 之后你的画布也会再次填满。

    【讨论】:

    • 我明白了。我该怎么办?
    • 好吧,无需查看近 500 行代码(!),您可以 .hide() 在完成橡胶绑定后执行临时橡皮筋的对象。 (我想我看到这是一个名为 ._node 的 Kinetic.Line)
    • 我可以尝试创建包含已清除区域的 Kinetic.Clear (Kinetic.Erase) 对象。我认为这样即使它会更好。
    • KineticJS 是一个保留系统,它与 html canvas 是一个非保留系统相反。试图创建“擦除区域”与 KineticJS 的精神背道而驰。所以备份......你用什么临时物体来画你的橡皮筋?当橡皮筋完成后,您不能只在该对象上执行 .hide() 。如果您执行 .hide() 则该对象将不可见且不会响应事件。
    • @markE 这就是为什么我使用设置 clearBeforeDraw:false 的 LARGE 层的性能不佳,但经常更新单个 SMALL 元素的 x/y 位置的原因吗?即使该图层上没有其他对象,它是否“绘制”了整个画布?另外,除了教程和生成的 API 文档之外,还有其他文档吗?后者有很多东西,比如“宽度:这设置了宽度”。没有添加解释或上下文,提出的问题没有答案。 (宽度是不好的例子)。此外,任何类的顶部都倾向于从 Node 克隆,您必须向下滚动才能查看实际属性。
    猜你喜欢
    • 2012-12-21
    • 2012-04-07
    • 1970-01-01
    • 2014-05-17
    • 2013-08-25
    • 2014-08-20
    • 2012-11-25
    • 2012-10-30
    • 1970-01-01
    相关资源
    最近更新 更多