【问题标题】:Problem with rotating object旋转物体的问题
【发布时间】:2011-04-12 10:15:27
【问题描述】:

我遇到这个问题已经有一段时间了,如果有人可以提供帮助,那就太好了。 :)

http://img31.imageshack.us/i/problemsc.jpg/ (问题说明)

所以,我有这个对象,注册点位于中间底部。我希望这个对象跟随鼠标,但在旋转时保持在屏幕的中心。这是我使用的:

dx = mouseX - this.x ;
dy = mouseY - this.y ;

radians = Math.atan2(dy, dx);
angle= radians * 180/Math.PI;

this.rotation = angle + 90;
this.y = mouseY + this.height; 

此代码的问题在于,当您将鼠标从中心移开时,例如角度不是 90 度,鼠标光标和对象之间存在偏移。通过跟踪,我发现它应该跟随鼠标的y位置,但是通过旋转对象,它的高度和宽度发生了变化,所以对象没有指向光标的右边。

有没有办法补偿这种偏移?或者也许是另一种方法? 提前致谢。

更新:好的,看来我没有正确解释问题,抱歉,英语不是我的母语。我需要对象跟随光标,但对象的前端与光标位于同一位置,对象的后端位于屏幕中间,就在中心 x 轴上。所以当你移动鼠标时,物体的前端会一直指向并且会在鼠标的位置上。后端应保持在同一位置,但要旋转。

【问题讨论】:

    标签: flash actionscript-3


    【解决方案1】:

    以下对我有用(与您的几乎相同)

    import flash.events.MouseEvent;
    
    const RAD_TO_DEG:Number = 180/Math.PI;
    const OFFSET:Number = 90;
    
    var angle:Number;
    var radians:Number;
    
    stage.addEventListener(MouseEvent.MOUSE_MOVE, moveIt, false, 0, true);
    
    function moveIt(e:MouseEvent):void {
        radians = Math.atan2(mouseY - mc.y, mouseX - mc.x);
        angle = radians * RAD_TO_DEG;
    
        mc.rotation = angle + OFFSET;
    }
    

    只需确保您正确设置了注册点(见图)

    我还上传了一个 SWF

    http://megaswf.com/serve/1054550

    【讨论】:

      【解决方案2】:

      如果注册点正确,则无需移动对象。您应该根据舞台的中心旋转它。 使用这个:

      this.rotation = (Math.atan2(stage.mouseY - stage.stageHeight/2, stage.mouseX - stage.stageWidth/2) / Math.PI) * 180
      

      您可以从这里下载示例 fla: http://rapidshare.com/files/457051556/rotation_mouse.fla

      【讨论】:

      • 嗨,谢谢你的建议,我检查了你的例子,但这不是我要找的。我需要对象始终从鼠标光标开始,并在屏幕中间结束,这就是我需要移动对象的方式......
      • 您可以移动对象,但是要根据舞台中心旋转对象并使其旋转到它的注册点,您需要使用该公式。检查这个fla:[链接]rapidshare.com/files/457056048/rotation_mouse2.fla
      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多