我想在KineticJS中创建复杂的形状。

我尝试了很多方法,搜索了很多,我得出了结论,我应该创建一个新的动态。同学。但是当我这样做时,形状是创建的,但没有填充。

是黑色的。

这是我的代码:

var complexShape = new Kinetic.Shape({
       drawFunc: function(){
       <?php include_once "script/dude.js" ?>
    }
 });

//Add the shape to the layer
layer.add(complexShape);
.

“Dude.js”的内容的一部分:(整件事是约4000行)

  var ctx = this.getContext();
  // calque1/Groupe
  ctx.save();

  // calque1/Groupe/Groupe
  ctx.save();

  // calque1/Groupe/Groupe/Trac
  ctx.save();
  ctx.beginPath();
  ctx.moveTo(325.6, 98.6);
  ctx.bezierCurveTo(322.3, 86.4, 322.7, 73.7, 326.7, 60.6);
  ctx.bezierCurveTo(317.3, 47.6, 309.7, 39.8, 303.7, 37.0);
  ctx.bezierCurveTo(295.8, 42.3, 290.8, 61.0, 288.7, 93.1);
  ctx.bezierCurveTo(283.5, 71.4, 282.5, 51.1, 285.7, 32.0);
  ctx.bezierCurveTo(280.5, 22.3, 275.1, 14.8, 269.5, 9.5);
  ctx.bezierCurveTo(265.6, 5.8, 261.7, 3.1, 257.6, 1.5);
  ctx.bezierCurveTo(256.8, 4.1, 256.0, 6.8, 255.3, 9.5);
  ctx.bezierCurveTo(249.2, 31.9, 247.5, 53.9, 250.1, 75.5);
  ctx.lineWidth = 3.0;
  ctx.strokeStyle = "rgb(75, 39, 111)";
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  ctx.stroke();
.

结果普通画布与KineticJS:

http://i.imgur.com/bm7ugyc.jpg

有帮助吗?

解决方案

您不正确使用形状类。您需要访问传入绘图功能的动态上下文对象。此外,正如Mark所指出的那样,您需要使用Kinetic.context方法来处理填充和笔划。简写符号是在绘图功能结束时使用ContexT.FillSthehehape(此)。看看本教程:

http://www.html5canvastutorials.com/kinicjs/html5-canvas-kineticjs-shape-tutorial /

或者,您还可以使用Path插件,允许您使用SVG路径定义形状。这是一个关于这个教程:

http://www.html5canvastutorials.com/kineticjs/html5-canvas-kineticjs-path-tutorial /

其他提示

kinetic.shape给你一个包装器围绕画布上下文,而不是实际的html canvas上下文。

要执行笔划/填充,请在drawFunc中调用此“魔术”方法

此Magic方法然后调用实际上下文的填充()和scroke()。

// both fill and stroke

context.fillStrokeShape(this);
.

你有另一个问题。

一个动词.Shape只会在drawFunc内做1填充和中风。

因此,具有多个填充和笔划的复杂形状将无法正常工作。

至少有2个替代方案:

  1. 使用包含多个动态的组.Shape对象。

  2. 获取实际帆布上下文

  3. “作弊”:var ctx=this.getContext()._context

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top