我有一张画在画布上的图像。当鼠标点击并拖动时,我得到鼠标坐标并使用它们来设置图像的positionX和Y.完成之后,我重绘画布。这就像一个魅力,我可以在画布上移动图像。
但现在我制作2个按钮,这样我就可以左右旋转图像了。当我旋转图像时,它现在相对于我旋转的角度移动。因此,当我将图像旋转180度并向上拖动图像时,它会下降!我不知道为什么会发生这种情况或者我如何弥补它。 :(
我明白我可能有点含糊,here is a demo of the problem.
答案 0 :(得分:2)
我无法访问您提供的演示网址,但这应该是通用的。
您需要将对象移动到坐标空间o:(0,0)
的基础,进行旋转,然后将对象移回到移动对象之前的位置,并且因为所有转换都连接到单变换矩阵,变换的顺序非常重要,你基本上只需要反向进行,即将对象移回其初始位置,然后旋转它,然后将其移动到坐标空间基础:
ctx.translate(objects_x_position, objects_y_position);
ctx.rotate(angle);
ctx.translate(-objects_x_position, -objects_y_position);
答案 1 :(得分:1)
尝试交换这两行
oContext.translate(oImage.size.x /2 ,oImage.size.y / 2); oContext.rotate(oImage.rotate * Math.PI/180);
首先旋转然后翻译。
答案 2 :(得分:0)
与ArtBIT的答案类似,但考虑到你想从中心旋转,我会使用代码:
ctx.translate(width/2, height/2);
ctx.translate(objects_x_position, objects_y_position);
ctx.rotate(angle);
ctx.translate(-objects_x_position, -objects_y_position);
ctx.translate((width/-2), height/-2);