`
shlei
  • 浏览: 287940 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Flex 4里的特效 2 - 高级图形特效

    博客分类:
  • FLEX
阅读更多
3D:在第三个维度上应用特效

当Flex小组忙于Flex4, 忙于思考组件架构,皮肤和名字空间的问题时。Flash小组发布了Flash Player 10. FP10有好多很酷的特性,
其中之一是3D功能,有了3D功能,我们不仅可以x轴和y轴定位和定向 显示对象,还可以在z轴这么作。

FP10 不支持完全的3D引擎。比如,没有Z缓冲区。这意味着你在渲染复杂的3D模型时可能遇到重叠的对象。幸好FP支持正确的3D定位和方向。这样我们就可以创建一些酷毙的特效。比如翻页和Fisheye(现在的手机上几乎都是这个东东)Flex team利用了FP的这些新功能。 Flex4 包含了一些新的特效来让你在3D上操作对象。我们前面提到的变换特效都有对应的3D版本:

下面的例子演示如何操作UI元素的3D属性。
<s:Rotate3D id="rotator" angleYFrom="0" angleYTo="360" 
    autoCenterTransform="true"
    effectEnd="effectEndHandler(event)" target="{button0}"/>
<s:Move3D id="mover" duration="200" zBy="-30" repeatCount="2"
    repeatBehavior="{RepeatBehavior.REVERSE}" 
    autoCenterTransform="true" 
    effectEnd="effectEndHandler(event)" target="{button1}"/>

<s:Button id="button0" label="rotate me" width="100" height="100" mouseOver="rotator.play()"/>
	
<s:Button id="button1" label="move me" width="100" height="100" mouseOver="mover.play()" x="150"/>

第一个效果是让目标绕着y轴旋转360度(注意是围绕按钮的中心旋转)。第二个效果就是让按钮的z值减少30像素,看起来就像是
按钮变大了一样 (也就是按钮凸出来的感觉),然后又把z的位置变回去(注意repeatBehavior的值)

使用像素混淆着色特效

FP10支持像素混淆着色。Pixel Bender Tookit是Adobe实验室的一项技术。它允许你创建小的程序来在像素级别操作图像,它允许
多个输入的图像,并按你的要求来操作像素。这个过程就是在遍历每个像素时,都调用你的小程序来计算最终要显示的像素的值。
我们这里不讨论如何使用Pixel Bender Tookit,而是讨论如何在Flex里使用这项技术。

Flash对像素混淆的支持使得创建Flash 对象的自定义过滤器(filter,就是那样阴影效果)成为可能。Flash过滤器是更改对象如何显示在界面上
的一项强大的技术,比如给对象增加一个阴影,或者给按钮增加一圈光晕效果。
在Flex 4里有2种可以试用像素混淆着色功能的效果:AnimateFilter和AnimateTransitionShader.

使用AnimateFilter

AnimateFilter不只能用于像素混淆着色,也可以给任何的过滤器增加动画效果。比如可以一个组件周围的光晕增加动画效果。
<fx:Declarations>
        <s:GlowFilter id="glow" blurX="20" blurY="20" />
        <s:AnimateFilter id="glower" target="{button}" 
        	bitmapFilter="{glow}" duration="600"
            repeatCount="0" repeatBehavior="{RepeatBehavior.REVERSE}">
            <s:SimpleMotionPath property="alpha" valueFrom="0" valueTo="1"/>
        </s:AnimateFilter>
 </fx:Declarations>
  <s:Button id="button" x="100" y="100" 
        mouseOver="if (!animating) { glower.play(); animating = true}" 
        mouseOut="if (animating) { glower.end(); animating = false}"/>

上面的例子就是让按钮周围的光晕从透明变成不透明(感觉就是阴影慢慢显示的效果)。
下面的例子真正用到了像素混淆的特效:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx"
    width="500" height="298"
    creationComplete="creationComplete()">
    
    <fx:Script>
        [Embed(source="images/GoldenGate.jpg")]
        [Bindable]
        private var GoldenGate:Class;
        private var goldenGateBD:BitmapData;//保存了GoldenGate的数据
        
        [Embed(source="images/Harbor.jpg")]
        [Bindable]
        private var Harbor:Class;
        private var harborBD:BitmapData;//保存了Harbor的数据
        
        private function creationComplete():void
        {
            goldenGateBD = (new GoldenGate()).bitmapData;
            harborBD = (new Harbor()).bitmapData;
        }
        
        private var newImageSource:Class;
        
        private function clickHandler():void
        {
            var bd0:BitmapData;
            var bd1:BitmapData;
            
            if (img.source == GoldenGate)
            {
                newImageSource = Harbor;
                bd0 = goldenGateBD;
                bd1 = harborBD;
            }    
            else
            {
                newImageSource = GoldenGate;
                bd0 = harborBD;
                bd1 = goldenGateBD;
            }
			
			//
            crossfadeFilter.shader.data.frontImage.input = bd0;
            crossfadeFilter.shader.data.backImage.input = bd1;
            crossfader.play();  
        }
        
        private function effectEndHandler():void
        {
			//特效结束后把图片的源换成新的图片源
            img.source = newImageSource;
        }
    </fx:Script>
    <fx:Declarations>
		<!--这是用Pixel Bender Tookit制作的外部过滤器,这个过滤器对2个图片进行合并-->
        <s:ShaderFilter id="crossfadeFilter" shader="@Embed(source='shaders/crossfade.pbj')"/>
		<!-- 
		  
		  intensity的值越靠近1,说明最终的图片越接近第二个图片
		   看起来的效果就是从第一张图片过渡到第二张图片
		-->
        <s:AnimateFilter id="crossfader" target="{img}" 
            bitmapFilter="{crossfadeFilter}" effectEnd="effectEndHandler()">
            <s:SimpleMotionPath property="intensity" valueFrom="0" valueTo="1"/>
        </s:AnimateFilter>
    </fx:Declarations>
    <mx:Image id="img" source="{GoldenGate}" click="clickHandler()"/>
</s:Application>

使用 AnimateTransitionShader

另外一种在FLex里使用像素混淆着色的方法是使用AnimateTransitionShader的子类。目前只有Wipe和Crossfade 2种效果。
AnimateTransitionShade和它的子类的设计思路是给状态前后的目标对象拍个快照。然后构造一个ShaderFilter,把2个图片
分别作为输入和混淆器,然后在ShaderFilter上运行动画来在2张图片之间进行切换。

因为这些特效都是执行一些很固定的任务,定时合并2个输入的图像。特别的,AnimateTransitionShader使用的着色器必须有3个输入图像。第二和第三个图像叫做from和to,并且必须有个叫做progress的浮点类型的属性,特效会用这个值来计算动画到了哪里。之所以要有第一个图像,是因为Flash 需要对第一个图像进行过滤。在这个情形里,我们从位图图像里就可以得到着色器的输出,所以我们传第一个图像只是为了满足Flash Player的要求。

默认情况下,目标对象必须是一个UIComponent或者GraphicElement的子类。因为这个特效会在这些对象上拍一个位图的快照。
不过如果你想在别的类型的对象(这些对象上没有拍快照的函数)间进行混淆特效也可以,那就是提供自己自定义的BitmapData对象。

就想它的名字那样,AnimateTransitionShader特别适合用在过渡的情形中。

Wipe和Crossfade特效很容易使用,因为它们内部已经提供了需要的着色器。你只需要制定目标对象就行了,当然,用Wipe特效的时候还有方向需要设置。

上面的例子是很直白的,所以就不再解释了。

From http://linmingren2003.blog.163.com/blog/static/5675100320101062546773/
分享到:
评论

相关推荐

    Flex 3D特效源码

    4. **3D图形编程**:Flex 3D特效利用了Stage3D API,这是一个硬件加速的图形渲染接口,可以实现高性能的3D图形。理解基本的3D概念,如顶点、坐标系统、矩阵变换和光照,对理解源码至关重要。 5. **AS3 3D库**:...

    flex4 3D特效

    1. **Stage3D API**: Flex 4中的3D特效主要基于Stage3D API,这是一个低级的硬件加速图形渲染引擎。Stage3D允许开发者直接访问GPU,进行高效的大规模图形处理,包括3D建模、旋转、缩放和动画效果。 2. **Spark组件*...

    FLEX特效FLEX特效FLEX特效FLEX特效

    Flex特效在IT行业中主要指的是Adobe Flex,它是一个用于构建富互联网应用程序(RIA)的开源框架。Flex使用MXML和ActionScript编程语言,可以创建交互性强、视觉效果丰富的Web应用程序。在网页设计和开发中,Flex特效...

    Flex翻书特效 OpenBook

    Flex翻书特效是一种在Web应用中模拟真实书籍翻页效果的技术,主要应用于电子图书、杂志或画册等在线阅读场景,能提供...OpenBook-翻书特效项目正是这样一个实践平台,它将帮助你深入了解Flex在实现高级UI特效上的潜力。

    Flex浏览杂志特效

    2. 实现杂志翻页特效: - 模拟物理行为:为了达到逼真的翻页效果,开发者需要模拟纸张的物理特性,如弹性、摩擦力和重力。这可能涉及到复杂的数学计算,如贝塞尔曲线来平滑动画过渡。 - 图形渲染:Flex3.0中的...

    Flex 菜单导航特效 工程源码

    - Flash Professional:可用于创建和编辑Flex项目的图形资源,然后导入到Flex Builder中。 6. 珍藏价值: - 学习资源:这个源码可以作为学习Flex菜单导航设计和实现的实例,帮助开发者了解如何在实际项目中应用...

    Flex 果冻特效Demo

    4. **ElasticEffect**:虽然Flex官方库可能没有直接提供“果冻”效果,但开发者可以通过自定义类和算法实现类似效果。一种常见的方法是模拟物理中的弹性碰撞,利用ElasticEffect类创建弹性反弹的效果。 5. **图形...

    flex火焰效果 特效

    在本案例中,我们关注的是"flex火焰效果 特效",这是一个在Flex应用中创建动态、引人注目的视觉效果的技术。 Flex提供了一个强大的图形库,名为Flex元件库,其中包含多种预定义的UI组件,如按钮、文本框等。这些...

    flex特效 不错的flex样式生成器

    这个“flex特效”生成器很可能提供了对以上属性的图形化配置,用户可以通过拖动滑块或选择预设值来生成对应的CSS代码。这对于初学者来说是一个很好的学习工具,对于经验丰富的开发者来说,也是一个提高效率的实用...

    Flex翻书特效

    Flex翻书特效是一种基于Adobe Flex和ActionScript 3(AS3)开发的互动式图书模拟效果,它使得用户可以通过类似真实书籍的方式翻页,提供了一种沉浸式的阅读体验。这个特效通常用于数字图书、电子杂志或者在线展示...

    Flex 3D特效

    Flex 3D特效是Adobe Flex框架中用于创建三维(3D)用户界面和动画效果的技术。Flex是一款基于ActionScript和MXML的开源开发工具,它允许开发者构建富互联网应用程序(RIA)。在本案例中,"Flex 3D特效"特别关注了...

    非常漂亮的flex特效-希望对大家有用

    在标签中提到了"flex特效",这可能意味着这个压缩包包含了一些定制或者创新的视觉效果,可能是利用了Flex的高级特性,如遮罩(Masking)、滤镜(Filters)、混合模式(Blending Modes)或者3D转换等。这些特效可以...

    flex3D特效

    Flex3D特效是一种在Adobe Flex框架中实现的高级视觉效果,它通过利用ActionScript 3.0的强大功能,为Web应用程序提供了丰富的3D体验。在本项目中,开发者提供了几个核心的3D特效,包括3D墙、鱼眼、水波纹以及开门...

    Flex_特效之鱼眼特效

    2. **图形绘制**:Flex允许开发者使用Graphics类来绘制自定义图形,包括在鱼眼特效中的图像变形。通过改变图形的顶点坐标,我们可以模拟鱼眼镜头的扭曲效果。 3. **计算变形**:鱼眼效应的计算涉及到数学公式,主要...

    flex特效编辑器 开发flex游戏的利器

    Flex特效编辑器是一款专为开发基于Adobe Flex技术的游戏而设计的强大工具。它简化了特效的创建过程,使得开发者能够更加高效地构建具有视觉冲击力的游戏体验。Flex是一种开放源码的框架,主要用于构建富互联网应用...

    flex图形特效,类似于百度定位地图

    在这个特定的场景中,"flex图形特效,类似于百度定位地图"指的是使用Flex技术实现的一种地图定位功能,它可能模仿了百度地图的某些特性,如实时定位、地图缩放和平移等。 首先,我们要理解Flex中的图形渲染机制。...

    Flex 标签云 特效 漂亮

    在本主题中,我们将关注Flex中的一个独特功能——标签云特效。 **标签云(Tag Cloud)** 是一种流行的数据可视化方式,常用于展示大量标签或关键词,其中每个标签的大小或颜色代表其出现的频率或重要性。在Flex中...

    Flex 鱼眼特效

    总的来说,"Flex 鱼眼特效"是一个结合了图形编程、交互设计和性能优化的项目,需要开发者具备扎实的ActionScript基础和良好的用户体验意识。通过学习和实践这个特效,开发者可以提升自己在Flex平台上的技能,创造出...

    flex_特效_源码_6种特效

    至于"flex特效整合"这个压缩包,它很可能包含了6种不同的Flex特效示例。这些示例可能涵盖以下几种常见特效: 1. **滑动/滚动效果**:在列表或容器中平滑地移动内容,常用于轮播图或导航菜单。 2. **淡入淡出效果**...

    flex builder 4 help

    总的来说,《Flex Builder 4 Help》文档是学习和掌握Flex 4开发的宝贵资源,涵盖了从基础概念到高级技巧的全面内容。通过深入研究这个文档,开发者可以充分利用Flex Builder 4的功能,创建出高效、美观的RIA应用。

Global site tag (gtag.js) - Google Analytics