ASC2.0让AS也可以写inline函数
AS3动态创建Vector
很久没有写博客了,已经近乎荒废的程度了.不过从现在起还是要坚持写博客了,很多东西做了测试,没有记录下来,很容易就能忘记的.忘记在哪里看到有人说想动态创建Vector只是苦于语法上不允许,不过还是能够绕开语法检查的
阅读全文...
Graphics.copyFrom 复制显示对象
Graphics.copyFrom 这个API是从flash player10开始有的,以前我们要复制一个显示对象,那是不可以的,当然你可以说用 BitmapData.draw 这个方法,但是原本是矢量对象,被draw之后就变成了位图.这样不是很好的.flashplayer10刚出来的时候有关注过一些新特性,但是对这个没有这么在意.
阅读全文...
Sound.loadCompressedDataFromByteArray
前不久Adobe发布了Flash Player 11的release版本, Flash Player 11 带来了很多新特性, 最最红火的就是Stage3D了,但是这里讲的是这个版本的另一个新特性, 直接播放MP3数据 Sound.loadCompressedDataFromByteArray.
以往我们要播放一个mp3,必须要有一个路径才能播放, 每次想要将声音文件缓存起来,就不方便.现在Flash 提供了直接播放bytearray的API,那么就方便多了。
阅读全文...
绕过安全沙箱获取音频频谱
变速音频播放
要改变音频播放的速度,其实这个功能早在FlashPlayer10就已经能够实现了。主要涉及的API为:
- Sound.extract : 提取原始音频数据
- SampleDataEvent.SAMPLE_DATA : 通过该事件将音频数据(可以修改)写入并播放。
Sound.extract(target:ByteArray, length:Number, startPosition:Number = -1):Number
target:用于放置提取的声音样本的ByteArray 对象。
length:要提取的声音样本数。样本包含左声道和右声道,即 2 个 32 位浮点值。
startPosition: 要提取的声音的开始位置. (默认为-1,标示按顺序提取)
return : 提取的声音样本个数。(1样本==2Float==8byte).
Stage Video flash在视频播放方面的GPU加速
Stage Video是在flash player 10.2和AIR 2.5的时候添加的一个可以利用GPU加速来播放视频的一个增强Video的功能. Stage Video 与 Video对比:
API | VideoStatus.ACCELERATED | VideoStatus.SOFTWARE |
Stage Video | 最优的情况,使用GPU解码并合成 | 使用软件解码,用GPU合成 |
Video | 使用硬件GPU解码,软件合成 | 最差的情况,使用软件解码并合成 |
StageVideo的限制:
- StageVideo对象不能被旋转。 只可能做到正交旋转(以90度的增量旋转)。
- StageVideo对象可能不能适用colorTransform或3D转换变形。 它没有一个适用的矩阵变换功能来对视频进行倾斜处理。
- StageVideo对象无法适用alpha 通道、混合模式、滤光器、蒙版或者scale9Grid这些功能。
- 其视频数据不能被复制到BitmapData对象(BitmapData.draw)中。
- 视频不能以位图格式缓存。
- 视频数据不能嵌入在SWF文件中。 StageVideo只能应用于源自NetStream对象的影片。
- 依赖于底层硬件设备,一些色彩空间可能不被支持。 在这种情况下,Flash Player将选择一个替代的色彩空间。 新的StageVideo ActionScript API提供了一种方式用来查询正在使用的色彩空间。
- 依赖于平台,在视频平面中允许显示的视频数量是有限的。 在大多数移动系统中,在全局范围任何时间内只允许播放一个视频。 这意味着,如果您有几个SWF文件的实例同时显示的话,只有第一个SWF文件能以硬件加速的方式显示。
- 为了保证台式电脑和TV设备中Flash Player的一致性,请将wmode设置为direct。
- 请避免让wmode="transparent"的SWF文件彼此相互层叠。 某些平台不支持wmode="transparent"模式,如Google TV。 这意味着当wmode ="window"时,无论<embed> 标签参数是何值,所有的SWF实例都能被平台支持。
还是老样子看个Demo吧.
全局错误处理(Global Error Handler)
全局错误处理也叫全局异常处理,全局错误处理机制(GlobalErrorHandler)是在Flash Player 10.1添加的,它允许开发者在一个全局的地方处理所有flash里未能处理的错误.
全局错误处理机制能处理的错误:
- 同步错误:(异常)AS代码执行的错误,可以用try...catch处理,但未处理的错误.
- 异步错误:在Flash内部线程执行时的错误,比如没有侦听IEOrror事件等.
全局错误处理机制不能处理的错误:
- AVM1错误:AS3加载AS2的swf, 在AS2的swf里出发的错误.
- JS错误:HTMLLoader及Flex的html组件里html里的js触发的错误.
更多有关全局错误的文档请UncaughtErrorEvent.UncaughtErrorEvent.
下面看一个全局错误管理的Demo.
flash本机鼠标指针NativeMouse
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标指针后,我们可以舍弃旧的方式,迎接更友好,更方便的鼠标指针了.
下面对比下模拟鼠标指针和本机鼠标指针.
模拟鼠标指针:
- 鼠标指针不能拖到舞台外部.
- 使用MouseEvent事件,效率低下.
- 使用方式麻烦.
本机鼠标指针:
- 鼠标指针可拖到舞台外部.
- 原生支持效率高.
- 直接用Mouse类,很方便.
新的本机鼠标的一些能力及限制:
- 必须使用BitmapData为鼠标指针的可视对象.
- 鼠标指针尺寸不能超过32*32.
- 可以使用多个BitamapData来播放动画.
- 可以自定义动画播放的帧频,与当前SWF的帧频无关.
- 可以鼠标自定义鼠标指针的热点,而不总是在(0,0)位置.
- 要在舞台外显示本机鼠标指针,必须按下鼠标左键拖到舞台外面才行.
下面看一个本机鼠标指针的示例: