02 十个Flex/Air疑难杂症及解决方案简略

02 十个Flex/Air疑难杂症及解决方案简略

最近去一家台企,对方给我出了十道“难道”:

  1. 在TileList中如果選擇檔過多,會出現捲軸,當拖動捲軸時,渲染的進度條會出現花屏現象;

简体:在TileList中如果选择档过多,会出现卷轴,当拖动卷轴时,渲染的进度条会出现花屏现象;電子白板中,控制權轉移;

  1. 简体:电子白板中,控制权转移;電子白板中,畫面同步;

  2. 简体:电子白板中,画面同步;電子白板中,錄影;

  3. 简体:电子白板中,录影;FLASH置頂問題;

  4. 简体:FLASH的置顶问题;聊天表情無法复制粘贴,由于聊天表情是动态文本,所以添加到textflow中的是一个sprite对象;

  5. 简体:聊天表情無法复制粘贴,由于聊天表情是动态文本,所以添加到textflow中的是一个sprite对象;老板模式,当系统焦点离开air程序后,无法检测到系统的key_down事件;

  6. 简体:老板模式,当系统焦点离开air程序后,无法检测到系统的key_down事件;Air注册表操作(登陆启动look程序);

  7. 简体:Air注册表操作(登陆启动look程序);在1.5的air运行时环境下,中文不能输入问题,因为客户端可能已经安装1.5的运行时,在网页安装中只能检测客户端是否安装了运行时,却无法检测到版本信息或者更新运行时;

  8. 简体:在1.5的air运行时环境下,中文不能输入问题,因为客户端可能已经安装1.5的运行时,在网页安装中只能检测客户端是否安装了运行时,却无法检测到版本信息或者更新运行时隐藏window边框后,鼠标在拖动窗口边界改变窗口大小时,不能设置系统光标样式。

  9. 简体:隐藏window边框后,鼠标在拖动窗口边界改变窗口大小时,不能设置系统光标样式


01 命名空间:如何控制未知方法的调用

01 命名空间:如何控制未知方法的调用

命名空间对于程序员来讲,应当不会陌生,几乎每写一行代码,就要用到一止一个命名空间。AS3默认大约打开了6个命名空间。

1,AS3提供的常用的7个命名空间

internal,private,protected,public,static,as3,前5个命名空间作为类属性访问控制说明,在AS3中 是默认打开的。最后一个命名空间as3,默认也是被打开的,一般很少显式用到它。flash_proxy命名空间在控制动态方法调用时很有用,默认它是关 闭的。

internal作为默认的命名空间,当程序员未显式使用访问控制说明时,它即被默认。


01 动态语言的基石之函数闭包

01 动态语言的基石之函数闭包

闭包(Closure)是函数(或方法)及其执行环境的组合体,它不仅包括函数(或方法)本身,也包括函数(或方法)运行时的上下文词汇环境。闭包是所有动态语言的基石,闭包实现了函数(或方法)可以作为参数传递给函数(或方法)。

1,用一个代码实验例示闭包概念

在AS3中,共种三种闭包:

1)函数闭包(Function Closure)

2)方法闭包(Method Closure)

3)类闭包(Class Closure)

public class Closure extends Sprite {
  public function Closure() {
   super();
   init();
  }
	private var author :String = "sban";
	private var onMouseClick2 :Function = function(e :MouseEvent) : void {
		trace("author:" + author, "this:" + this);//author:undefined this:[object global]
	};
	private function init() :void {
		var onMouseClick1 : Function = function(e :MouseEvent) : void {
			trace("author:" + author, "this:" + this);//author:sban this:[object global]
		};
		this.stage.addEventListener(MouseEvent.CLICK, onMouseClick2);
	}
	private function onMouseClick(e :MouseEvent) :void {
		trace("author:" + author, "this:" + this);//author:sban this:[object Closure]
	}
}

02 像Ruby一样简易行码:使用Prototype扩展原生对象

02 像Ruby一样简易行码:使用Prototype扩展原生对象

AS3是基于ECMAScript标准的语言,Adobe团队在遵从此标准的同时,使其向Java靠拢具有Class-Base的特征,因此,AS3是一门很奇特的语言,它既像Javascript,又像Java(Java与Javascript是两门完全不同的语言)。

1,Ruby的collect方法

Ruiby的行码简易,让很多程序员爱不释手。

#!/usr/bin/ruby
puts [1,2,3,4,5,6].collect{|x| 10*x}

03 AS3中的八种基元类型

03 AS3中的八种基元类型

一,八种基元类型

何谓基元类型?即是一门语言中最基本基本的数据类型,其它数据类型均是以此为基础定义的,并且可以作为变量注释类型或函数返回类型。在AS3中,共有八种基元类型:

[此有图,但已被岁月冲走]

1)Boolean

布尔类型,仅有true与false两个值。默认值为false。特殊值NaN,undefined,null,字符串空值(”),0转换为Boolean后均为false。

2)Number

默认值为NaN。Number为64位的浮点数值类型,按IEEE-754标准设计。在IEEE-754标准中,一个符号位,11个指数位,52位有效数字位。Number仅有52位有效数位,为什么可以表示最大为253的精度呢?


04 AS3中的一些基本定义,Function与Method的区别

04 AS3中的一些基本定义,Function与Method的区别

Adobe在官方英文文档中,并未专意对一些基本作区别说明;多数自动翻译或中文翻译,又存在翻译不当之处,古人有云,差之毫厘,缪以千里。且先试问一句,Function与Method有何区别?

Function与Method翻译成中文,不知如何翻译,使用英文更好。function在AS3中,是定义函数的关键字,但它定义的不一定是Function,也可能是Method。

1,Method与Function的区别

使用function关键字在Class内部显式定义的方法,称为Method,而除此之外使用function关键字定义的方法皆称为 Function。Function类似于js中的function方法。如此区分概念,有助于理解AS3的闭包(closure)概念。


05 E4X用法简要

05 E4X用法简要

E4X语法是AS3对ECMAScript标准最前卫的实现,也是目前所有高级编程语言中操作XML最为方便的方式之一。仅仅因为AS3实现了E4X,作为程序员至少也应该了解它一下,因为它是那样的简洁、优雅。

因为AS3实现的是ECMAScript 357 for XML标准(ECMAScript对XML的扩展标准),简称为E4X。自有E4X以来,AS2程序员应该忘掉以前惯用的XMLDocument、 XMLNode、XMLParser 和 XMLTag。在AS3中,操作XML仅需要记住两个类:XML与XMLList。

主要概念:


06 Flash Player的垃圾内存回收机制:能否强制回收?

06 Flash Player的垃圾内存回收机制:能否强制回收?

在Adobe Flash Player 10中,AS3的内部垃圾回收机制是怎样的?程序员可以强制FP回收内存吗?答案是否定的,但有方法。

1. 毛主席请猫吃辣椒的故事

建国初期,国家正在对资本主义工商业进行社会主义改造,毛泽东问周恩来、刘少奇等,如何才能让猫吃辣椒?刘少奇说,把猫逮住,用筷子捅下去。周总理说,先把猫饿上三天,然后把辣椒裹在肉里给它吃。毛主席都不赞成这两种做法,毛主席说,把辣椒抹在猫屁股上,猫觉得辣自然就去会舔,而且还会因为这样做而兴奋不已。

2. 强制垃圾内存回收的代码


01 AS3事件机制概述

01 AS3事件机制概述

事件机制是AS3的核心功能之一,没有充分掌握事件机制的方方面面,就不能算是精通AS3语言。

1,AS3事件机制的主要成员

  • IEventDispatcher:事件派发对象接口,定义了添加、派发、移除、是否监听指定事件、是否触发指定事件接口
  • EventDispatcher:事件派发对象接口的实现者,用户无法撇开EventDispatcher而自行实现IEventDispatcher接口,无法直接继承
  • EventDispatcher时,必须把EventDispatcher作为实例变量。
  • Event:事件基类,所有事件类均基于此类实现