旋转物体的问题

问题描述:

我一直有这个问题一段时间,如果有人可以帮忙,这将是很好的。 :)旋转物体的问题

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; 

这段代码的问题是,当你从中心,e.g移动鼠标了。角度不是90度,鼠标光标和对象之间有偏移。通过跟踪,我发现它跟随鼠标的y位置,但是通过旋转对象,它的高度和宽度都在变化,因此对象不会指向光标。

有没有办法补偿这个抵消?或者也许另一种方法? 在此先感谢。

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

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

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

+0

您好,感谢您的建议,我检查你的榜样,但这不是我要找的。我需要的对象总是从鼠标光标开始,并在屏幕中间结束,这就是我需要移动的对象.... – GeorgeCross 2011-04-12 10:41:22

+0

您可以移动对象,但要旋转基于中心的对象的阶段和它的注册点,你需要使用该公式。检查此fla: [link] http://rapidshare.com/files/457056048/rotation_mouse2.fla – btibia 2011-04-12 11:03:15

对我来说,下面的工作(这几乎等同于你的)

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