1

我想为我的照片库添加功能 - 照片拇指的不同类型动画。现在我确实喜欢下面的代码。一切正常,但我希望拇指从舞台边缘弹起。

最重要的是,我需要不同模式的动画——3D 旋转木马的运动、绕圈旋转、太阳光线和背部的运动等。

如果您有这些和类似动画的现成代码,我将不胜感激。

[Bindable] private var stageW:int = Capabilities.screenResolutionX;
[Bindable] private var stageH:int = Capabilities.screenResolutionY;

private var itemsVector:Vector.<Image>=new Vector.<Image>();
private var xSpeedVector:Vector.<Number>=new Vector.<Number>();
private var ySpeedVector:Vector.<Number>=new Vector.<Number>();

stage.addEventListener(Event.ENTER_FRAME, update);

private function moveSetup():void {
for(var i:int = 0; i < FlexGlobals.topLevelApplication.objects.length; i++){
    if (FlexGlobals.topLevelApplication.objects[i] is Image){
        var item:Image=FlexGlobals.topLevelApplication.objects[i] as Image;
        item.x=Math.random()*stageW;
        item.y=Math.random()*stageH;
        var randomDirection:Number=Math.random()*2*Math.PI;
        this.addElement(item);
        itemsVector.push(item);
        xSpeedVector.push(2*Math.cos(randomDirection));
        ySpeedVector.push(2*Math.sin(randomDirection));
    }
}   
}

protected function update(event:Event):void {
    for(var i:uint=0;i<itemsVector.length;i++){
        itemsVector[i].x+=xSpeedVector[i];
        itemsVector[i].y+=ySpeedVector[i];
        if(itemsVector[i].x>stageW){
            itemsVector[i].x-=stageW;
        }
        if(itemsVector[i].x<0){
            itemsVector[i].x+=stageW;
        }
        if(itemsVector[i].y>stageH){
            itemsVector[i].y-=stageH;
        }
        if(itemsVector[i].y<0){
            itemsVector[i].y+=stageH;
        }
    }
}
4

1 回答 1

1

看看Greensock 的 TweenLite 库,它几乎是 Flash 中动画的标准(而且,作为额外的奖励,最近已移植到 JavaScript)。

它支持包括反弹功能在内的各种设置缓动功能。该库的付费版本甚至包括创建自定义缓动函数的能力。在我链接到的第一页中间有一个交互式演示,您可以在其中实时使用库并测试各种缓动功能。

谷歌搜索将出现各种教程,解释如何构建(伪)3D 轨道旋转木马,以及执行相同操作的第三方组件。事实上,这些在相当简单的三角函数上实现铰链相对简单。此示例似乎可以为您提供一个合理的起点,以适应您的特定要求。

3D 效果当然可以在 Flex 中实现。我建议你看看Away3D,它是一个为 Flash 平台编写的开源 3D 库。这里有一个在 Away3D 中实现的水平螺旋效果示例(连同完整的源代码)。

于 2012-06-06T09:26:49.237 回答