Graphics.copyFrom 复制显示对象
Graphics.copyFrom 这个API是从flash player10开始有的,以前我们要复制一个显示对象,那是不可以的,当然你可以说用 BitmapData.draw 这个方法,但是原本是矢量对象,被draw之后就变成了位图.这样不是很好的.flashplayer10刚出来的时候有关注过一些新特性,但是对这个没有这么在意.
阅读全文...
Graphics.copyFrom 这个API是从flash player10开始有的,以前我们要复制一个显示对象,那是不可以的,当然你可以说用 BitmapData.draw 这个方法,但是原本是矢量对象,被draw之后就变成了位图.这样不是很好的.flashplayer10刚出来的时候有关注过一些新特性,但是对这个没有这么在意.
阅读全文...
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。
AS3中的Array.sort就是实现排序的工具,它有多种用法,不过使用自定义排序函数时需要注意。 为了更容易的理解下面问题,先弄明白一个排序算法相关的概念:稳定性。
稳定排序:假设在待排序的元素中,存在两个或两个以上的记录具有相同的关键字(或值),在用某种排序法排序后,若这些相同关键字(或值)的元素的相对次序仍然不变,则这种排序方法是稳定的。 而我们下面的代码跟稳定性无关的,因为不存在相同的元素。
阅读全文...
要改变音频播放的速度,其实这个功能早在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 player 10.2和AIR 2.5的时候添加的一个可以利用GPU加速来播放视频的一个增强Video的功能. Stage Video 与 Video对比:
API | VideoStatus.ACCELERATED | VideoStatus.SOFTWARE |
Stage Video | 最优的情况,使用GPU解码并合成 | 使用软件解码,用GPU合成 |
Video | 使用硬件GPU解码,软件合成 | 最差的情况,使用软件解码并合成 |
StageVideo的限制:
还是老样子看个Demo吧.
全局错误处理也叫全局异常处理,全局错误处理机制(GlobalErrorHandler)是在Flash Player 10.1添加的,它允许开发者在一个全局的地方处理所有flash里未能处理的错误.
全局错误处理机制能处理的错误:
全局错误处理机制不能处理的错误:
更多有关全局错误的文档请UncaughtErrorEvent.UncaughtErrorEvent.
下面看一个全局错误管理的Demo.
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标指针后,我们可以舍弃旧的方式,迎接更友好,更方便的鼠标指针了.
下面对比下模拟鼠标指针和本机鼠标指针.
模拟鼠标指针:
本机鼠标指针:
新的本机鼠标的一些能力及限制:
下面看一个本机鼠标指针的示例:
flash player 10.1增加了p2p(pear to pear)的支持,可以先看下flash最简单的p2p对象复制demo。
对象复制
调用NetGroup的 addHaveObjects()、removeHaveObjects()、addWantObjects()、removeWantObjects()、writeRequestedObject() 和 denyRequestedObject() 以将大型数据分解成数据片段,然后将其复制到对等组中的所有节点。
今天看 优化 Flash 平台的性能 帮助文档时发现一个未公开的顶级函数 getSize()。
猜想getSize的接口可能是:
/**
* 获取对象的内存占用量
* @param p 任意类型,甚至是Class
* @return 一个数值,单位是byte
*/
public function getSize(p:*):uint;
不过这个方法只能在时间轴上使用,在类里就不能用了。
感谢jim提醒,原来这个方法在flash.sampler包下,请看 flash.sampler.getSize() 。
然后我测试了下flash里有没有内存对齐的概念。
不过获得的内存值都是4的倍数。
如果里面有属性占用为8,则结果则为8的倍数。
相关链接:
之前只是知道尽量用强引用,不要用弱引用,因为弱引用会被垃圾回收. 对于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,让我们来一边享受引用,一边学习吧。
阅读全文...