1

请这个小提琴我已经在这里复制了我的完整项目如果你在输出中打开小提琴你可以看到一个图像,在图像选择笔上涂鸦,添加文本等(像这样执行一些功能)。然后使用旋转旋转组按钮,然后尝试乱涂乱画,您就会明白到底是什么问题。

在我看来问题是我有一个舞台,一个图层被添加到舞台,一个组被添加到图层,不同的元素(如线条文本等)被添加到组中。然后组旋转,我试图根据舞台的鼠标位置画线。但它不正确,因为组旋转了 x 和 y,我们用来画线的东西来自舞台。我需要从组而不是从舞台上取 x 和 y 是他们的任何方式。如果不明白,请询问我或发表回复。

4

1 回答 1

0

这应该让你相当接近:http: //jsfiddle.net/k4qB8/24/

// This rotates that added active line along with your group.
// This makes the draw direction correct
activeline.setRotationDeg(0-rootGroup.getRotationDeg());

// Here you'll have to figure a way to calculate how much to move the 
// line over so the draw is on the correct spot
// This is as close as I got it
     if(Math.abs(rootGroup.getRotationDeg()%360)==0)
           activeline.move(rootGroup.getX()-375, rootGroup.getY()-175);
     if(Math.abs(rootGroup.getRotationDeg()%360)==90)
           activeline.move(rootGroup.getX()-175, rootGroup.getY()+375);
     if(Math.abs(rootGroup.getRotationDeg()%360)==180)
           activeline.move(rootGroup.getX()+375, rootGroup.getY()+175);
     if(Math.abs(rootGroup.getRotationDeg()%360)==270)
           activeline.move(rootGroup.getX()+175, rootGroup.getY()-375);

此外,为逆时针旋转添加更多逻辑,因为这不是 100% 工作的。

我认为真正的解决方案是为每次旋转绘制单独的图层,有点像这样:

 if (rotation is 90) : draw on lineLayer1;
 if (rotation is 180) : draw on lineLayer2;
 if (rotation is 270) : draw on lineLayer3;
 if (rotation is 360 || 0) : draw on lineLayer4;

这样,您可以只旋转未绘制的图层来模拟旋转的感觉。

于 2013-01-04T15:30:30.477 回答