在鼠标位置As3上的不同轴上旋转动画片段

时间:2011-03-27 05:39:01

标签: actionscript-3

我正在寻找主页上显示的旧UFC效果 - http://84.ufc.com/的方向。它是基于鼠标位置在不同轴上旋转的动画片段。到目前为止,我找到了这个脚本:

stage.addEventListener(MouseEvent.MOUSE_MOVE,EnterFrame);
function EnterFrame(e:Event)
{
    mc.rotation = (180*Math.atan2(mouseY-mc.y,mouseX-mc.x))/Math.PI + 90;
}

但这仅在x和y上旋转。有什么方法可以达到这个效果?请提出任何建议。我已搜索了好几个月。

2 个答案:

答案 0 :(得分:1)

如果您使用的是Flash CS4 +并定位Flash Player 10+,则可以使用3D DisplayObject API(又名“空间明信片”)来实现此效果!所有DisplayObject都将具有您可以调整的xyzrotationXrotationYrotationZ属性。

创建一个movieclip并将其放在舞台上。原点 - 选择剪辑时出现的十字准线 - 应位于舞台的中间位置。为movieclip提供实例名称clip

双击动画片段,并在其中放置其他动画片段。使用“3D旋转”和“平移”工具在父剪辑中将这些剪辑定向为3D。您可以在工具栏中找到3D工具 - 它有一个类似蛋的图标,或者按键盘上的W或G键。

现在,这里有一些简单的代码,可以根据鼠标位置调整父剪辑的方向:

import flash.events.Event;

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(event:Event):void
{
    clip.rotationX = (stage.mouseY - stage.stageHeight/2) * 0.1;
    clip.rotationY = (stage.mouseX - stage.stageWidth/2) * 0.1;
}

你可以玩这个来提出许多其他效果。但请注意,您只能使用这些属性执行简单的3D效果。您无法进行完整的3D旋转,因为剪辑不会从后向前排序。对于更复杂的效果,您需要使用Papervision3DFive3D等框架。

答案 1 :(得分:1)

我刚刚发现......

import flash.events.Event;

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(event:Event):void
{
    anim.rotationX += ((stage.mouseY - stage.stageHeight/2)-anim.rotationX*3)  * 0.05;
    anim.rotationY += ((stage.mouseX - stage.stageWidth/2)-anim.rotationY*5)  * 0.05;
}