iDom

关注HTML5 UI框架 Mobile 图形渲染

利用弱引用特性构建对象池及动态共享资源

在我较早的一篇文章《利用Dictionary的弱引用特性实现动态内存管理》中详细介绍了使用弱引用的好处。下面贴两个工具类代码,充分利用了弱引用的特性,实现动态内存管理,既可以重用或共享对象,又不需要担心内存回收问题。 废话不多说,先上代码: Recycler.as package org.flexlite.domUtils { import flash.utils.Dictionar...

关于"Flash运行时阻塞"

最近在做资源加载模块,发现加载大文件的时候,UI直接冻结了,进度条当然就不更新了。然后就想起原先看过的这篇文章:Flash运行时阻塞,文章里说Loader或者URLLoader加载文件的时候,不是异步的。并且给了测试代码。文章里说的似乎跟我的测试结果是一致的:我在加载大文件的时候,各种掉帧,只有当一个文件加载完成的时候,才能刷新一次屏幕。不过转念想下,要是真的是这样,那就太悲剧了。因为加载文...

AIR3.3及3.4版本BitmapData.encode()的Bug

最近做位图转换的时候,发现一个矢量素材的绘制结果总是出现色差。如下图。 开始以为是应用colorTransform过程出了bug。测试了之后发现,即使没有colorTransform也会出现色差。排除了所有可能后,发现是使用了AIR3.3开始提供的位图编码接口:BitmapData.encode()造成的。而使用Flex4.6自带的mx.graphics.codec.PNGEncode...

关于多帧影片剪辑的bug,初始化尺寸含有随机小数

最近项目开发过程中,又遇到了一个极其棘手的bug。调试了一天,最后发现是影片剪辑的bug。 简要介绍下背景:我们要位图化UI,将swf导入,绘制舞台上所有显示对象成BitmapData,然后进行两两比较,去除重复项并共享位图数据。判断位图的重复的方式有两种,直接两两像素比较BitmapData.compare(),或者为每个位图生成唯一的CRC32验证码,两两比较验证码即可。出于性能考虑,...

AS3多线程快速入门(三):NAPE物理引擎+Starling[译]

原文链接:http://esdot.ca/site/2012/intro-to-as3-workers-part-3-nape-physics-starling [更新]Adobe在11.4正式发布的最后一刻移除了ByteArray.shareable功能的支持,推迟到11.5版本再发布。为了解决这个问题,源码已经被我更新过了。但这里还是留下完整的示例代码,因为它能最终会正常运行的。 在...

AS3多线程快速入门(二):图像处理[译]

原文链接:http://esdot.ca/site/2012/intro-to-as3-workers-part-2-image-processing 在《AS3多线程快速入门》系列教程的第一部分中,我们研究了AS3 Worker的基本原理,包括多种通信方式,还展示了一个简单例子:Hello World Worker。 在这篇文章里,我将更进一步,向你展示如何利用多线程做些有用的功能,比...

AS3多线程快速入门(一):Hello World[译]

原文链接:http://esdot.ca/site/2012/intro-to-as3-workers-hello-world 随着AIR3.4和Flash Player11.4的测试版发布,Adobe终于推出了多年来被要求最多的API:多线程! 如今,使用AS3 Workers让创建真正的多线程应用变得非常简单,只需要几行代码即可。这个API相当的简单易懂,而且他们还做了一些非常有用的...

AIR 3.0针对移动设备的高性能渲染方案(二)[译]

紧接上一篇,原文链接:[Fast Rendering in AIR: Cached SpiteSheet](http://esdot.ca/site/2012/fast-rendering-in-air-cached-spritesheets) 以下是译文: ** **在上一篇文章中,我展示了如何正确地使用AIR3.0的GPU加速模式,能让你在移动设备上的性能提高500%的方法。现在我们把...

AIR 3.0针对移动设备的高性能渲染方案(一)[译]

现在基于Stage3D的2D框架非常热门,但是事实上Stage3D API加速的不仅是3D应用,对传统的Bitmap显示对象也进行了大幅度的优化。如果仅是开发2D应用,其实不必舍近求远去使用那些2D框架。这篇无意中看到的外文博客,提供了一种既简单又高效的优化方案。翻译一下,共享出来。原文链接:[Fast rendering in AIR 3.0 (iOS & Android)](ht...

用Flex实现网页自动登录和文件抓取

六维空间是个下载电影的好地方。各种外面无法下载到的新的旧的电影都能下载到,并且还都用MiniSD这种高性价比的压缩格式封装的。非常适合收藏。但是必须要有IPV6网络和六维的账号才能下载。好了,不帮他们打广告了,下面进入正题。六维电影板块有几个索引贴,收集了评分最高的几百部电影,比如IMDB Top250,豆瓣Top250,历届奥斯卡最佳影片等,里面链接到每个电影的对应帖页面。要下载全的话,就...

利用Dictionary的弱引用特性实现动态内存管理

这几天看了些文章,提供了一种显示对象位图化并共享位图数据的优化方案,测试了下能提高不少性能,所以想自己也实现一个试试。基本思路如下: import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.utils.Dictionary; import ...

Flash Builder概要分析BUG

一句话结束:Flash Builder里运行概要分析不能使用单机调试版的FP去测试,得到的数据总是内存没有被回收,Web版的和Air版的调试都没问题,并且若你的工作空间路径包含中文,概要分析将无法运行。

Flash Player播放音频导致的极其隐秘的线上Bug

这几天遇到一个纠结的问题。游戏上线后,大家都可以正常访问,唯独公司有几台机器总是无法进入游戏。以为是个别测试人员的数据配置问题导致的,一开始没有关注。到后来客服说用户也出现了这个情况,而且还不少的时候,这个事引起大家的重视。我们一堆人在一台100%不能访问游戏的电脑上调试了半天,也没发现有什么问题。只能查出一件事:这台电脑上,无论谁的账号,任何浏览器下,都无法进入我们游戏。而同样的账号,在其...

关于使用接口解耦模块的一点体会

看过不少资料,凡是谈到接口,基本上都会提到依赖注入,组合编程,模块解耦这三个概念。这些概念在《软件框架设计的艺术》这本书里都有提到。这本书的前言里有一段话是说,之所以称之为艺术,是因为很难用语言去描述它,有些人可能已经在使用了,但是却说不出其中为啥好的道理来。今天在试图优化框架编译文件大小的过程中,对接口的使用又有些体会,记录一下。 先说关于包结构定义的体会。 之前移植了Flex的绘图元...

一次只关注一个点,迭代开发

写UI框架的过程中,两次遇到了瓶颈。一次是年前写到DataGroup的时候,另一次就是最近,在写RichEditableText的时候。两次都感觉写不下去了。每次打开FB,看了一会就感觉没思路,不想写。两次都是暂停了很长时间,觉得不能再拖了,就捡起来,硬着头皮写完的。写完总结一下,发现其实这两个组件并不比其他的组件复杂多少。比起核心的布局类,更是没难度。但是那些类我都写完了。为什么写着两个的...

镂空遮罩

这几天写游戏的新手引导模块,需要做一个镂空遮罩,就是盖着整个场景,只让用户点击镂空的一个圆形区域。这个事看起来很简单。。。其实就是很简单啊!可是因为我把问题想得太复杂了,浪费了好多时间,特此文章一篇。也希望遇到同样问题的人,不再跳进这个坑。 先是上网搜索了,发现都是用混合模式的方法:1.先创建一个Sprite画一个矩形盖着整个场景,blendMode设置为Layer,2.再创建一个Spri...

《软件框架设计的艺术》读书笔记

从老大位置上淘来的好书《软件框架设计的艺术》,只看了几章。先写点读书笔记备忘。后续再更新。 书中大部分的内容,都是围绕框架向后兼容性,和可扩展性展开的。全书虽然是基于Java写的,但是对于AS来说绝大部分也同样适用。 一.只公开你需要公开的内容。必须要限制对外公开的方法和属性的数量,包括public 和protected的,这些API一旦公布,就代表了对外的一种承诺,你永远不能去改变他们...

命令行编译工具mxmlc

最近在研究怎么实现针对自己的UI框架的XML可视化编辑器,发现flex的命令行编译工具mxmlc蛮好用的,就尝试了一下。简单的思路是:用xml编辑UI;然后自己写一个XML to AS代码的文本编译器;再用mxmlc实时编译as文本为swf文件;最后在编辑器里加载进来显示并编辑属性并把改变的属性值填回到xml文件。就实现对xml文件的实时预览编辑了。 mxmlc 有个参数非常不错:-kee...

用addElement()方法替代addChild()?

在Flex中,容器一律使用addElement(IVisualElement)系列方法替代原生的addChild(DisplayObject)系列方法来操作子对象,并且屏蔽了addChild()系列方法。目的是兼容非显示对象的添加和层级管理,比如绘图元素:GraphicElement。但是在游戏开发中,操作原生对象的机会还是比较多的,这时候就会出现addChild()和addElement(...

AS零碎笔记

从初学AS到现在,遇到过不少的问题,有些是第一次遇见容易出错的,有些是容易混淆的,现在记录下印象比较深的犯过的错,对自己也是个提醒吧: 1.Number类型变量不赋值的话,初值为NaN(Not a Number),NaN与所有数字的运算,返回结果都是NaN,所以计算时或判断时务必记得给Number赋初始值! trace(100+NaN);//NaN trace(0==NaN);/...