Adobe AIR是什么?有什么用?

发布网友

我来回答

3个回答

懂视网

Adobe Air是Adobe公司用来争夺移动设备应用开发的一个重要武器。移动设备的一个重要体验是手指滑移,但Adobe并没有为Air推出官方滑移的SDK。 所以,若打算用Air来开发移动应用,则会碰到滑移这个问题。以下是对基于Air滑移的一些基本原理及其优化方案的讨论

Adobe Air是Adobe公司用来争夺移动设备应用开发的一个重要武器。移动设备的一个重要体验是手指滑移,但Adobe并没有为Air推出官方滑移的SDK。

所以,若打算用Air来开发移动应用,则会碰到滑移这个问题。以下是对基于Air滑移的一些基本原理及其优化方案的讨论,本文最后会给出一个示例。

基本原理

scroll view

上图说明了滑移的显示列表。

ScrollBg是整个滑移的背景,手指在此进行操作,它是侦听手指滑移事件的目标。

ScrollTarget是需要进行滑移的对象,其父为ScrollBg。p1,p2和p3为内部的显示对象。

ScrollMask是滑移对象的mask,用于对滑移对象形成遮罩,其父为ScrollBg。

综上,我们需要在ScrollBg上侦听用户手指事件,对ScrollTarget进行滑移,在滑移时我们只能看到被ScrollMask遮罩的那部分。

在Adobe Air里,MouseEvent等同于手指触摸的TouchEvent,而只有在需要多点触控时,TouchEvent才有其特有的优势。所以我们侦听MouseEvent即可以侦听用户的手指操作。

  • 手指按下处理

  • 通常情况下,手指按下是整个滑移过程的开始。我们可以侦听MouseDown事件来模拟手指按下。

    在MouseDown侦听器里我们还要添加一系列事件侦听器,来构成整个滑移过程的侦听。

    我们需要知道用户的手指移动,于是需要侦听MouseMove事件。我们还需要知道用户手指的释放,于是需要侦听RollOut和MouseUp事件。此外,我们还可能需要侦听EnterFrame事件,来做一些内部的更新逻辑。

    综上,我们在MouseDown侦听器里处理滑移的开始,并为手指移动,手指释放及每帧更新等事件添加侦听器。

  • 手指滑移处理

  • 在MouseMove事件侦听器里,我们需要让滑移对象跟随玩家的手指进行移动。

    所以在添加MouseMove侦听器之前,我们需要事先记录滑移对象当前的位置信息(诸如mouseX,mouseY),并在MouseMove侦听器对滑移对象的位置进行记录,通过两个位置的差异,我们可以计算出滑移对象需要移动的距离。

    若需要移动的距离在合理的范围之内(如:不超过边界值的一半大小),我们将对滑移对象的位置进行改变,并进行更新。

    有时候,我们可能会对滑移对象内的对象添加点击事件,但是我们不希望在滑移释放手指的时候触发这些点击事件。这时候我们可以在MouseMove侦听器里通过计算滑移对象的移动距离,来判断是否应该触发点击事件。

    比如若用户的手指只移动了1-2个像素,用户很可能只是希望点击,而非滑移,所以此时我们不进行处理;但是用户的手指移动了10个以上像素,则我们可以认为用户是在进行滑移操作,此时我们将滑移对象的mouseChildren和mouseEnabled属性禁用,则点击事件则不会在滑移时触发了。

    综上,我们在MouseMove侦听器里记录手指的位置,更新滑移对象的位置以跟随手指移动,做一些特殊处理以避免滑移时让用户触发点击事件。

  • 手指离开处理

  • 我们可以将RollOut事件和MouseUp事件视为用户手指离开了滑移触发区域,从而为这两个事件添加一个共同的侦听器MouseLeaveHandler。

    在ios和android的原生滑移里,当用户滑移时手指离开屏幕,系统会对滑移对象进行自动滑移,这类似于物理中的惯性。

    所以我们需要对滑移对象进行一个类似“惯性”的缓动,并在缓动结束的时候,做一些滑移结束的处理。

    同时释放MouseMove和MouseLeaveHandler的侦听,并重新添加MouseDown事件的侦听,来侦听新的滑移。

    综上,我们在MouseLeaveHandler里移除MouseMove和手指移开的事件侦听,并对滑移对象做一个”惯性”的缓动,在缓动结束时,做滑移结束的处理。

    优化方案

    相对于其他移动开发的引擎,Flash的渲染效率较低,在弱CPU的移动设备上体现尤其明显。

    滑移需要移动大块显示区域,可能会造成卡顿和跳帧,所以优化是必须要进行的一项工作。

    以下是一些我在实践总结出来的优化方案。

  • 切换为GPU模式

  • 经试验,将大面积滑移从cpu模式切换到gpu模式后,滑移的效率显著的提升了,基本可以达到原生滑移的效果。 只需要修改-app.xml里面的
    gpu
    GPU模式的优点是处理大块渲染区域移动的效率会显著提升。 缺点是不能使用滤镜,不能使用混合模式,在某些android机型(基本是低端机)上可能会跑不起来。 其中滤镜可以用位图替代,但是可能会带来内存上升的问题。
  • 在滑移时降低显示质量

  • 相对于PC屏幕,移动设备屏幕的ppi值要高很多。这就意味着,当我们在移动设备上降低显示质量时,实际感觉画质效果并没有PC上丢失的那么多。 所以在滑移开始时,我们可以先降低舞台显示质量。

    stage.quality = StageQuality.LOW;

    等滑移结束时,再恢复舞台显示质量。

    此方案带来的效率提升也是显著的。

    但是会显著的降低显示质量,所以需要在效率和效果方面做取舍。

  • 减少渲染区域

  • 减少渲染区域可以从根本上解决渲染压力的问题。

    实际上,在滑移时,有许多区域都在遮罩区域之外,但这些人眼不可见的区域的位置仍然会被CPU计算,从而浪费CPU周期,降低了效率。

    所以,我们可以在EnterFrame事件里,将在遮罩区域之外的滑移对象的visible设为false。从而避免了它们占用CPU周期。

    以下代码片段说明以上的方法。

    var i:int;
    var numChildren:int = _target.numChildren;
    var child:DisplayObject;
    for(i = 0; i < numChildren; i++)
    {
    	child = _target.getChildAt( i );
    	//对所有滑移对象的子项,若其超过mask超过一定距离MAX_VISIBLE_DIST
    	//则将其visible设为false
    	if( _direct == ScrollDirection.VECTORIAL || _direct == ScrollDirection.BOTH )
    	{
    		if( child.y + child.height + _target.y < _bounds.top - MAX_VISIBLE_DIST || child.y + _target.y > _bounds.bottom + MAX_VISIBLE_DIST )
    		{
    			child.visible = false;
    		}
    		else
    		{
    			child.visible = true;
    		}
    	}
    	else if( _direct == ScrollDirection.HORIZONTAL || _direct == ScrollDirection.BOTH )
    	{
    		if( child.x + child.width + _target.x < _bounds.left - MAX_VISIBLE_DIST || child.x + _target.x > _bounds.right + MAX_VISIBLE_DIST )
    		{
    			child.visible = false;
    		}
    		else
    		{
    			child.visible = true;
    		}
    	}
    }
  • 尽可能使用位图而非矢量

  • 矢量需要CPU实时进行计算,所以尽可能避免在移动设备上使用矢量,尽可能用位图来替代。
  • 减少事件侦听

  • 事件侦听会消耗帧时间,而且不能恰当的销毁事件侦听会带来恐怖的内存泄露。 所以尽可能减少不必要的事件侦听。 比如在滑移时,将目标的mouse相关属性禁用,等待滑移结束时再启用。

    示例

    示例:http://wuzhiwei.net/opensrc/ScrollAs3/ScrollAs3.html
    源码:https://github.com/iWoz/AirScroll

    热心网友

    Adobe air 是知名软件公司Adobe旗下的产品之一。 Adobe Integrated Runtime允许你利用现有的web开发技能(包括Flash, Flex, HTML, JavaScript, Ajax)优势,建立和配置跨平台(或跨操作系统)的桌面RIA(InternetApplications)应用。

    产品用途:

    Adobe AIR 3 Runtime 使开发人员可以使用 HTML、JavaScript、Adobe Flash&reg; 软件和 ActionScript 构建可作为不受浏览器约束的客户端应用程序运行的 Web 应用程序。


    扩展资料:

    Adobe AIR的特点:

    1、本地运行-类似桌面应用程序。

    2、跨平台-类似java技术,在不同的操作系统上有对应的虚拟机支持,已经有windows和mac,linux。

    3、开发是基于现有的web技术,如Flash / Flex / ActionScript / HTML / JavaScript / CSS / Ajax /PDF,对于开发人员,不需要学习c、c++、java之类的底层开发语言,不需要学习具体操作系统底层API的开发。

    这降低了开发门槛,使现有的做web开发的技术人员,依赖其原本就很熟悉的开发模式,稍加训练就可以开发良好丰富的富客户端应用。

    参考资料来源:百度百科-adobe air



    热心网友

    其实通俗的讲Adobe Air就是一个平台,这个平台提供一些软件接口,想开发软件的人员用这些接口和其他的编程技术可以开发出来一些软件,而这些开发出来的软件只有在安装有Adobe Air的电脑上可以运行。你看看你电脑上有没有必须依靠Adobe Air才能运行的软件,如果没有,可以卸掉他,现在基于Adobe Air的软件不是很多,一般有的也可以找其他软件代替的。我们再来看看一般的专业解释:Adobe Integrated Runtime (AIR) 是一个跨操作系统的运行时,利用现有的Web开发技术(Flash,Flex,HTML,JavaScript,Ajax)来构建富Internet应用程序并部署为桌面应用程序。
    AIR 支持现有的Web技术如Flash,Flex,HTML,JavaScript和AJAX,可以用你最熟练的技术来开发您所见过的最具用户体验的RIA程序,例如,一个AIR程序可以使用如下一种或多种组合技术构建:
    �6�1Flash / Flex / ActionScript �6�1 HTML / JavaScript / CSS / Ajax �6�1 PDF 可嵌入任何应用程序中 作为结果,AIR 应用程序可以是:
    �6�1 基于Flash 或 Flex:应用程序根内容(理解为容器)为Flash/Flex (SWF) �6�1 基于Flash 或 Flex 的HTML 或 PDF。应用程序的根内容为基于Flash/Flex (SWF) 的HTML (HTML, JS, CSS) 或 PDF
    �6�1 基于HTML,应用程序根内容为HTML, JS, CSS �6�1 基于HTML的Flash/Flex或PDF,应用程序根内容为基于HTML 的Flash/Flex (SWF) 或 PDF 用户使用AIR 应用程序的方式和传统桌面程序是一样的,当运行时环境安装好后,AIR 程序就可以其他桌面程序一样运行了。
    因为AIR 是应用程序运行时环境,因此她很小且对用户来说不可见。运行时环境提供了一套一致的跨操作系统平台和框架来开发和部署应用程序,因此你的程序不必到每个平台上进行测试,在一个平台上开发好就可以在其他平台上运行了,这有很多好处:
    �6�1 开发AIR应用程序不必做额外的跨平台工作,节省了时间,因为跨平台的工作AIR都帮我们做好了(只要其他平台能支持AIR)。
    �6�1比起Web技术及其设计模式,AIR应用程序开发迅速,她允许将Web开发技术搬到桌面上来而不用另外去学习桌面程序开发技术或复杂的底层代码,这比起低级语言如C 和 C++更容易学习,且不用去处理每个操作系统复杂的底层APIs 。现在用Flash/Flex开发的android应用需要Adobe AIR运行时环境,否则无法运行,当然也是以apk的方式打包。
    1、Adobe AIR SDK (官方的标准开发工具包)
    2、Flex 3 SDK
    3、Flex Builder 3
    4、Dreamweaver CS3 + Adobe_AIR_extension_for_Dreamweaver_CS3 (扩展插件)
    5、Flash CS3 + Adobe_AIR_update_for_Flash_CS3_Professional (扩展插件)
    就像您必须在电脑里安装“Java虚拟机”后(往往被集成到操作系统里),才能运行使用 Java语言编写的软件一样。
    要想运行采用 AIR 技术的程序,您必须安装一个 Adobe AIR 。adobe airV3.6.0.5350授权:免费软件 大小:16.5M 语言: 简体下载地址本周共下载 838 次

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com