手动触发GC(强制执行AVM2垃圾回收)

今天对自己写的东西进行测试,一直对其内存占用耿耿于怀,一直运行该SWF文件,我看到内存检测一直在上升,就算不按任何按钮,不作任何动作,内存也是逐渐的上升。我检查了一遍又一遍,没用的变量我也null掉了,不用的侦听我也remove掉了,不该存在的显示对象也remove掉了,可是内存还是没有被释放出来。

GC这东西,一直为AS开发者所诟病,GC什么时候执行,开发者完全不能控制,下一秒?下一分钟?下一个钟?恐怕等到GC自动执行的时候,程序早就内存泄露崩溃了。

google一下,发现GC原来是可以手动触发的,不过是通过某些非官方认可的手段

以下是核心代码:

try
{
new LocalConnection().connect("run GC");
new LocalConnection().connect("run GC");
}catch(error : Error)
{ }

上述代码写在一个函数中,或者封装成工具类的静态方法,用的时候调用该方法就好了,每调用一次,GC就会强制执行一次,经测试,这种方法能很好的控制内存的释放,非常有用。

原理:GC在程序抛出错误的时候,会自动执行一次,该方法就是故意抛出一个错误,让GC自动执行一次,catch error又会让程序得以继续运行。

注意:虽说GC强制执行能释放内存,但会耗CPU,据说这一动作耗时200 ms(具体我还没有验证),如果该说法属实,200 ms积累起来还是一个颇大的延时,所以手动触发GC要谨慎。

资料来源:http://bbs.9ria.com/viewthread.php?tid=234&extra=&page=1(回复很精彩)


mouseEnabled与mouseChildren区别

对于禁用鼠标交互,mouseChildren与mouseEnabled能达到异曲同工的效果,mouseChildren更为常用,但需要注意的是:

1、mouseChildren是DisplayObjectContainer类的属性,对于按钮和TextField类是无法使用

2、当遇到按钮与TextField类的话,就只能使用mouseEnabled属性,其属于InteractiveObject类的属性,按钮与TextField类都是继承InteractiveObject类,因此能使用

附AS3显示类关系结构图:

[...] (阅读全文……)


摄像头大头贴程序v0.0

实习几天后做的东西,完全没有人带,完全自己做出来的(这公司纯粹是打酱油的公司)

摄像头大头贴程序v0.0

实现功能:

1、获取本机摄像头并显示在画面

2、利用摄像头拍照

3、对拍的照片进行简单的裁剪

4、保存图片到本地

需要用到的几个核心类:

Video类(摄像头实时回放)、Camera类(获取摄像头)、BitmapData类(截图、裁剪)、JPGEncoder类(保存图片格式)、FileReference类(本地保存)、ByteArray类(本地保存)

源码稍后 [...] (阅读全文……)


关于[Embed]嵌入图片的问题

这里说的是Flash加载外部图片的另一种方法,就是利用[Embed]元数据标签嵌入,这种方式本质上不同于loader,这种方法本质就像Flash IDE里的库一样,编译的时候资源文件会一并编译进SWF文件,也就是说,编译一次后,用于[Embed]的资源文件可以丢弃了,因为在编译的时候已经集成在SWF文件中去了。下面简单介绍一下用法:

1、声明一个Class类来接管[Embed]进来的图片(相当于元件库中的链接类):
[Embed(source = ",,/res/photo.jpg")]
var Photo:Class;

2、添加进显示列表: [...] (阅读全文……)


[转]Flash游戏开发内存优化13条

这篇算是读书笔记吧,边读边记,一来用简练语句分享,二来加深学习印象!关于内存优化总结了13条!错误请指正,欢迎跟帖补充!我会继续努力抽时间写一些读书笔记到个人博客9stg.com和天地会,欢迎大家交流!共同进步!

1. 使用合适的显示对象,对于非交互的简单形状用Shape对象,对于不需要时间轴的交互式对象用Sprite,对于使用时间轴的动画用MovieClip,他们的内存使用量分别是236,412,440,可见shape很省内存

2. Number原始存储内存占8个字节,int,uint,Boolean,String均占4个字节, 关于赋值后作占内存,取决值赋 [...] (阅读全文……)


[转]Flash游戏开发CPU优化11条

FLASH平台优化的学习笔记,总结出一条一条总比看长篇大套的好,欢迎补充和指正!我会继续努力抽时间写一些读书笔记到个人博客9stg.com和天地会,欢迎大家交流!共同进步!

1.       FLASH PLAYER10.1 引入了两种减少CPU处理的功能,一个是睡眠模式,另一个是SWF内容位于屏幕之外是暂停和恢复该内容

2.       睡眠模式是暂停呈现并将Stage.frameRate设置成4fps, 之所以不是0,是让所有连接保持打开状态(NetStream, S [...] (阅读全文……)


在FDT中为project添加类路径

1、点需要添加外部类路径的project,再点菜单栏的project选项,找到Properties
[...] (阅读全文……)


getDefinitionByName()使用注意

Flash元件库导出SWC到FDT/Flex/FD使用时候需要注意,getDefinitionByName( )不能直接获取导出资源类

getDefinitionByName("ClassName")
其中ClassName只能是Flash的内置类,不能使用自定义类,也就是说不能使用导出的SWC的资源类,如果想通过自定义类名获得类的话,需要在使用getDefinitionByName前先声明自定义类一次,如下图

[...] (阅读全文……)


再发现一个FP 10.3的问题

貌似[SWF(backgroundColor=0x000000)]标签无效了,无论改什么颜色,都会统一变成默认的白色,我的以前的应用也是这样,上网看到人家以前背景色不是白色的应用也是这样,这是10.3的bug还是啥的?明天再解决这个问题。

解决了,原来是自己的机子的问题,下载一个FP卸载程序卸载FP,再重装FP就解决了

附链接:
版本检测网址:http://www.adobe.com/software/flash/about/ [...] (阅读全文……)


操蛋的FP10

今晚刚完成了一个时钟特效,本来挺高兴的,结果发现了一个bug(本来写程序发现bug是很正常不过的事,但这个bug也太操蛋了)。

FP在不可见状态(即失去焦点时)会自动减低帧频,FPS减低到2帧,可见状态下恢复正常,也就是所谓失去焦点后FP会进入睡眠模式。

天啊,FPS降低到2帧,我的时钟应用是每秒都addChild东西进去的,超过屏幕就会removeChild,以帧频驱动作运动,由于碰撞检测的代码写的比较低级(菜鸟没办法),同屏的显示对象超过150就会卡的不行,由于有removeChild,这样正常帧频下能使同屏显示对象的数量控制在50以下。

但 [...] (阅读全文……)


  • 博客管理

    • 登录
    • 日志 RSS
    • 评论 RSS
    • 中国博客网
  • 存档页

  • 最新评论

  • Copyright © 2011 Maliu's 有码空间
    iDream theme by Templates Next | Powered by BlogCN.com - WordPress