Graphics.copyFrom 复制显示对象

2011年12月5日 1 条评论

Graphics.copyFrom 这个API是从flash player10开始有的,以前我们要复制一个显示对象,那是不可以的,当然你可以说用 BitmapData.draw 这个方法,但是原本是矢量对象,被draw之后就变成了位图.这样不是很好的.flashplayer10刚出来的时候有关注过一些新特性,但是对这个没有这么在意.
阅读全文...

Array.sort(customSortFunction:Function)隐藏的陷阱

2011年7月10日 6 条评论

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。
AS3中的Array.sort就是实现排序的工具,它有多种用法,不过使用自定义排序函数时需要注意。 为了更容易的理解下面问题,先弄明白一个排序算法相关的概念:稳定性。
稳定排序:假设在待排序的元素中,存在两个或两个以上的记录具有相同的关键字(或值),在用某种排序法排序后,若这些相同关键字(或值)的元素的相对次序仍然不变,则这种排序方法是稳定的。 而我们下面的代码跟稳定性无关的,因为不存在相同的元素。
阅读全文...

变速音频播放

2011年4月29日 没有评论

要改变音频播放的速度,其实这个功能早在FlashPlayer10就已经能够实现了。主要涉及的API为:

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加速

2011年4月28日 2 条评论

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)

2011年4月9日 2 条评论

全局错误处理也叫全局异常处理,全局错误处理机制(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

2011年4月3日 没有评论

Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标指针后,我们可以舍弃旧的方式,迎接更友好,更方便的鼠标指针了.

下面对比下模拟鼠标指针和本机鼠标指针.

模拟鼠标指针:

  • 鼠标指针不能拖到舞台外部.
  • 使用MouseEvent事件,效率低下.
  • 使用方式麻烦.

本机鼠标指针:

  • 鼠标指针可拖到舞台外部.
  • 原生支持效率高.
  • 直接用Mouse类,很方便.

新的本机鼠标的一些能力及限制:

  • 必须使用BitmapData为鼠标指针的可视对象.
  • 鼠标指针尺寸不能超过32*32.
  • 可以使用多个BitamapData来播放动画.
  • 可以自定义动画播放的帧频,与当前SWF的帧频无关.
  • 可以鼠标自定义鼠标指针的热点,而不总是在(0,0)位置.
  • 要在舞台外显示本机鼠标指针,必须按下鼠标左键拖到舞台外面才行.

下面看一个本机鼠标指针的示例:

阅读全文...

Flash P2P 对象复制详解

2010年12月29日 6 条评论

简介

flash player 10.1增加了p2p(pear to pear)的支持,可以先看下flash最简单的p2p对象复制demo

对象复制

调用NetGroup的 addHaveObjects()removeHaveObjects()addWantObjects()removeWantObjects()writeRequestedObject() 和 denyRequestedObject() 以将大型数据分解成数据片段,然后将其复制到对等组中的所有节点。

阅读全文...

flash getSize 方法

2010年7月25日 2 条评论

今天看 优化 Flash 平台的性能 帮助文档时发现一个未公开的顶级函数 getSize()
猜想getSize的接口可能是:

/**
 * 获取对象的内存占用量
 * @param   p   任意类型,甚至是Class
 * @return  一个数值,单位是byte
 */
public function getSize(p:*):uint;

不过这个方法只能在时间轴上使用,在类里就不能用了。
感谢jim提醒,原来这个方法在flash.sampler包下,请看 flash.sampler.getSize()
然后我测试了下flash里有没有内存对齐的概念。
不过获得的内存值都是4的倍数。
如果里面有属性占用为8,则结果则为8的倍数。

相关链接:

节省内存-显示对象
节省内存-原始类型

标签: , ,

弱引用 addEventListener

2010年6月27日 5 条评论

之前只是知道尽量用强引用,不要用弱引用,因为弱引用会被垃圾回收. 对于flash.utils.Dictionary倒是没有什么疑问.但EventDispatcher.addEventListener就不明白具体是侦听器被回收了,还是侦听者被回收了。
昨天有看了一些文章,又想起这个问题,就想要理解透彻,于是又仔细看了下API文档.

Class-level member functions are not subject to garbage collection, so you can set useWeakReference to true for class-level member functions without subjecting them to garbage collection. If you set useWeakReference to true for a listener that is a nested inner function, the function will be garbge-collected and no longer persistent. If you create references to the inner function (save it in another variable) then it is not garbage-collected and stays persistent.

原来这里的弱引用是对侦听器的(侦听器函数),跟侦听者没有关系. 为了验证这个观点,我做了个小Demo。
OK,让我们来一边享受引用,一边学习吧。
阅读全文...

ByteArray各方法详解

2009年10月23日 没有评论

这段时间在做socket, 当然就用到ByteArray了,O(∩_∩)O~, 写下ByteArray各种方法(API)含义。

objectEncoding: 设置ByteArray读写Object是编码格式, 仅对writeObject,readObject这两个方法有用。
endian:指示多字节数字的最高有效字节位于字节序列的最前面。 一般不用设置, 默认是Endian.BIG_ENDIAN.
阅读全文...

标签: , ,
回到顶部