实际上draw()
and drawHit()
在文档中,但它们的记录很少:
- http://kineticjs.com/docs/Kinetic.Stage.html#draw http://kineticjs.com/docs/Kinetic.Stage.html#draw
draw()
绘制图层场景图
- http://kineticjs.com/docs/Kinetic.Stage.html#drawHit http://kineticjs.com/docs/Kinetic.Stage.html#drawHit
drawHit()
绘制图层命中图
令人惊讶的是我找不到第三个也是最后一个draw方法:drawScene()
在动力学文档中。同样令我惊讶的是,这 3 个函数没有被发现是从父类扩展而来的Kinetic.Stage
: 动能容器 http://kineticjs.com/docs/Kinetic.Container.html
无论如何,我认为这个问题解释了差异完美的方法:KineticJS 绘制方法之间有什么区别? https://stackoverflow.com/questions/14722787/what-is-the-difference-between-kineticjs-draw-methods
当然,无法避免使用这些功能,您会need最终使用其中之一,除非您的画布/舞台在整个应用程序期间是静态的。 (*可能有例外,见下文)
回答您的问题:
How:
Call .draw()
on any Kinetic.Container
包括:stage
layer
and group
,或任何Kinetic.Node
其中包括所有Kinetic.Shape
例子:
stage.draw(); //Updates the scene renderer and hit graph for the stage
layer.drawHit(); //Updates the hit graph for layer
rect.drawScene(); //Updates the scene renderer for this Kinetic.Rect
Why:
我认为不让所有东西都重绘是一个性能问题Kinetic.Stage
每一次都有变化。通过这种方式使用绘制方法,我们可以在需要更新和渲染舞台时以编程方式进行控制。正如您可能想象的那样,如果场景中有 10000 个节点,则必须一直绘制舞台的成本相当高。
When:
drawScene()
任何时候您需要更新场景渲染器(例如使用.setFill()
更改形状的填充)
drawHit()
要更新命中图如果您将事件绑定到形状,以便任何事件的点击区域都会更新为节点更改。
draw()
每当您需要执行上述两项操作时。
Finally,也许示例/实验室将是这里最有益的学习工具,所以我准备了一个JSFIDDLE http://jsfiddle.net/projeqht/6udqk/供您测试差异。按照说明进行操作并阅读我的评论,以更好地了解正在发生的事情。
*NOTE:我上面提到有一个例外,必须使用绘制方法。那是因为每当您向舞台添加图层时,图层中的所有内容都会自动绘制。在小提琴的底部有一个小例子。