旋转物体的问题

时间:2011-04-12 10:15:27

标签: flash actionscript-3

我已经有一段时间遇到这个问题了,如果有人可以帮忙的话会很棒。 :)

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轴上。因此,当您移动鼠标时,对象的前端将始终指向并位于鼠标位置。后端应保持在同一位置,但要旋转。

2 个答案:

答案 0 :(得分:2)

以下适用于我(它几乎与你的相同)

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;
}

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

enter image description here

我还上传了一个SWF

http://megaswf.com/serve/1054550

答案 1 :(得分:0)

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

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