在 KineticJS 4.7.2 上使用 globalcompositeoperations

Posted

技术标签:

【中文标题】在 KineticJS 4.7.2 上使用 globalcompositeoperations【英文标题】:use globalcompositeoperations on KineticJS 4.7.2 【发布时间】:2013-11-02 22:31:00 【问题描述】:

使用 KineticJS 4.6.0 在this question 回答了这个问题,提供了这个fiddle

但是...知道如何在最新版本的 kineticjs 上执行此操作吗?

我用 kineticjs 4.7.2 尝试了同样的小提琴:http://jsfiddle.net/qNtSg/ 我刚刚用新的 API 改变了 drawFunc

drawFunc: function (context) 
    ... 
    context.fillStrokeShape(this);

合成不工作

【问题讨论】:

【参考方案1】:

Kinetic.Shape 在最近的版本中发生了变化。

现在 Shape drawFunc 接收上下文的包装器而不是画布。

但是,包装的上下文仍然不支持globalCompositeOperation

因此,您仍然需要通过获取实际的 html 上下文(而不是包装的上下文)来“作弊”。

以下是获取实际 html 上下文的方法:

drawFunc: function(context) 
    var ctx=this.getContext()._context;
    ....

所以这里是修改后的代码和小提琴:http://jsfiddle.net/m1erickson/h3DGB/

        var reveal = new Kinetic.Shape(
          drawFunc: function(context) 
            var ctx=this.getContext()._context;
            ctx.save();
            ctx.beginPath();
            ctx.globalCompositeOperation="destination-out";
            ctx.arc(120,120,75,0,Math.PI*2,false);
            ctx.closePath();
            ctx.fill();
            ctx.restore();
          ,
          dragBoundFunc: function(pos)  return(pos); ,
          fill: '#00D2FF',
          stroke: 'black',
          strokeWidth:4,
          draggable:true
        );

【讨论】:

【参考方案2】:

非常鼓舞人心的答案。我的要求略有不同,但我可以通过阅读来做到这一点。留下评论的小提琴以便做出贡献)。 我在这里是因为声誉低于 50 岁,我还不能发表评论 :)

再次感谢 MarkE 的启发, 愚蠢的东西不能在没有代码的情况下发布小提琴

马克西

<html>
  <head>
    <style>
      body 
        margin: 20px;
        padding: 20px;
      
    </style>
  </head>
  <body>
 </body>
</html>

愚蠢的东西不能在没有代码的情况下发布小提琴

http://jsfiddle.net/L7eLR/

【讨论】:

以上是关于在 KineticJS 4.7.2 上使用 globalcompositeoperations的主要内容,如果未能解决你的问题,请参考以下文章

KineticJS - 图像上的图案和填充

如何在kineticjs中通过json在舞台上绘制图层

使用 HTML5 Canvas 和 KineticJS 在 Android Webview 上平移、缩放性能不佳

无法在 html5 中使用 Kineticjs

使用 KineticJS 从层中删除对象

在 KineticJS 中检测舞台上的点击而不是形状上的点击