【问题标题】:Understanding rotation and calculating the top left point in KineticJS在 KineticJS 中理解旋转和计算左上角
【发布时间】:2014-02-09 03:27:23
【问题描述】:

我正在创建一个可以查看图像的页面。我想创建一个旋转工具。我已经这样做了,但是,它并没有始终如一地工作。当我将中心点设置为旋转时,图像会轻微跳跃,并且每次都会变得更糟。我正在试验,并且,我有代码在我的顶级组的左上角添加一个楔子(所以,在 0,0 处)。如果我将图像旋转 45 度并拖动它,使其一半离开画布的左边缘,然后我在楔形和组上调用 getAbsolutePosition,我得到这些值:

layer.getAbsolutePosition() 对象 {x: 104.66479545850302, y: 279.2748571151325} 楔形.getAbsolutePosition() 对象 {x: 180.2684127179338, y: -73.48773356791764}

我认为这意味着我的 y 位置实际上是图像的底部,它在屏幕外。

我想要做的是计算图像中间的绝对位置,当鼠标移到它上面时,不管它是否旋转。我有一些代码可以通过旋转来计算点,这似乎一开始几乎可以工作,但是我使用该工具的次数越多,它就越坏。我觉得关于 Kinetic 如何跟踪这些事情以及它报告了什么,我错过了一些东西。任何提示将不胜感激。我可以阅读的教程甚至更好(是的,我已经阅读了 KineticJS 网站链接的所有内容并搜索了网络)。

简而言之,问题是,如果我在一个组中有一个图像,并且它被旋转了,我如何计算图像的中心点,将旋转考虑在内,以及如何设置偏移量所以它会从那个点旋转,并保持在同一个地方?

谢谢

【问题讨论】:

    标签: javascript rotation kineticjs


    【解决方案1】:

    正如您对 KinetiJS 的发现:

    • 旋转很容易
    • 拖动很容易
    • 拖动+旋转困难

    拖动图像后,您必须重置其旋转点(offsetX/offsetY)。

    KineticJS 使拖动+旋转变得比它必须的更困难。

    重置图像的偏移点将导致 KineticJS 自动移动图像(不!)。

    这就是导致你跳跃的原因。

    “跳”问题的解决方法:

    当您重置图像的旋转点 (offsetX/OffsetY) 时,您还必须重置图像的 X/Y 位置。

    此代码在拖动后重置图像的 XY 和偏移:

    演示:http://jsfiddle.net/m1erickson/m9Nw7/

    // calc new position and offset
    
    var pos=rect.getPosition();
    var size=rect.getSize();
    var offset=rect.getOffset();
    var newX=pos.x-offset.x+size.width/2;
    var newY=pos.y-offset.y+size.height/2;
    
    // reset both position and offset
    
    rect.setPosition([newX,newY]);
    rect.setOffset(size.width/2,size.height/2);
    

    【讨论】:

    • 谢谢。这是我第二次尝试就这个问题寻求帮助,第一篇文章更长,并且包含了代码。我实际上已经在做类似的事情了,但是当我这样做时,我的图像会跳跃一点,并且在随后的旋转后跳跃很多。我在一个组中有一个组,这有关系吗?在顶级组上设置偏移量是否足够?基本上,当我第一次将鼠标移到图像上时,它偏离了几个像素。下次我在图像上移动时(因此它会重新计算),它是错误的,并且会变得更加错误。如果我旋转图像,就会发生这种情况。
    • 是的,您必须先重置组位置和相对于舞台的偏移量。然后您必须接下来重置图像相对于组的位置和偏移量。
    • 太棒了,我今天早上醒来时认为这可能是问题所在,我猜你已经确认了,这给了我一条真正的前进道路,所以再次感谢
    • 好的,我最后不能贴出我写的解决这个问题的代码,但它是基于你的代码,但是setPosition需要一个带有X和Y的对象,我需要使用setPositionX和 setPositionY。最后一个问题 - 鼠标第一次经过时图像仍然会轻微跳跃,但之后不会。任何建议为什么?再次感谢。
    • 如果我想在你的例子中移动旋转器(紫色小圆圈)控制器,我必须改变什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多