(完)
(完)
通过类定义而生成的实例,在 AS3 中是属于 Sealed 类型,即其属性和方法无法在运行时修改。这部分属性在 AS2
中是通过类的
prototype 对象来存储,而在 AS3 中则通过被称为 Trait 的概念对象存储管理,无法通过程序控制。这种处理方式一方面减少了通过
prototype 继承链查找属性方法所耗费的时间(所有父类的实现方法和属性都会被直接复制到对应的子类的 Trait
中),另一方面也减少了内存占用量,因为不用动态的给每一个实例创建 hashtable 来存储变量。如果仍然希望使用 AS2
...
完整阅读本文...]]>
Action Script
Action Script简称为AS,是Flash产品平台的脚本解释语言。该语言可以实现Flash中内容与内容,内容与用户之间的交互。AS的解释工作由Action Virtual Machine(AVM)来解释,AVM可以称之为AS虚拟机,类似于JVM,AVM是Flash Player播放器中的一部分。AS语句要想起作用是要通过Flash创作工具或Flex服务器将其编译生成2进制代码格式方可,而编译过的2进制代码格式将成为SWF文件中的一部分,被Flash播放器执行。AS1.0起源于ECMAScript标准,由于ECMA的语法的兼容性和Flash Player播放器的大小和渲染引擎的需要,AS可以称之为是语法来源于ECMAScript。
说到AS不得不说Flash4的AS集合,它曾经让Flash4兼容格式的内容变化多端。但是从一定程度上,Flash4的AS不能称之为成熟的并且为开发者所承认的脚本语言集合。它的语法方式完全不同于ECMAScript。虽然我们可以在Flash5的时代可以向它添加一些ECMA效仿的语句上去,但是AS在Flash4中是完全于ECMAScript标准相左的。现在Flash4的AS仍然可以被应用在Flash Lite1.1的内容之上。
AS1.0是从Flash5的时代诞生的,这时的版本就已经具备了ECMAScript标准的语法格式和语义解释。尽管后来的Flash Player5/6的播放器版本(Build)的一再更新,使得越来越多的ECMA语法和语义被纳入到AS1.0的API当中去,但是核心语言的编译处理及表现方式都是延续了Flash5的AS1.0的标准。甚至于到后来的Flash7,对于AS1.0的核心解释机制,仍然与Flash Player5有着很多相同之处。
AS2.0是在MX时代被慢慢引入的,而在MX 2004版本被开发者全面采纳。AS2.0的运行则是完全在Flash Player6以上的版本中才具备的机制。AS2.0在Flash6中都可以运行,是因为AS2.0语句在运行时(runtime)环境下仍然采用了AS1.0的模型。这也是骨子里为什么AS2.0的运行性能并不比AS1.0优秀的重要原因。AS2.0的编写方式则是更加成熟,引入了面向对象编程的方式,并且有良好的类型声明,而且分离了运行时和编译时的异常处理。AS2在格式上遵从了ECM...
完整阅读本文...]]>
以下是 Flash Lite 2.0 支持的新功能.
1,支持 ActionScript 2.0
该和Flash 4的AS语法(tellTarget)说再见了,现可用流行的点语法和OOP方法编程.
2,视频回放
Flash Lite 2 的视频回放是基于手机自身的视频渲染程序
就是说只要是手机支持的视频格式(3gp,mpg),就都可以在Flash中播放,这点比PC上更好.
3,解析外部XML
可使用Flash 7(MX2004)的XML对象,访问和解析外部XML文件.
4,本地数据访问
可以在手机上保存文件了,即使用本地共享对象(SharedObject)
5,载入外部图片和声音
从本地或网络上载入图片和声音文件(JPEG,MP3)
6,动态文本支持中文了(7yue 补充).
Flash Lite Player 2 启动要花掉 750k 到1M 系统内存
为了达到最佳性能表现,官方建议大家在运行FL2时,尽量少运行过多其他的应用程序.
像较早推出的一些Nokia智能手机,由于硬件配置低,已经和Flash Lite 2无缘了
按本文截至日期,目前支持 Flash Lite 2.0 的手机型号如下:
Nokia 3230
Nokia 6260
Nokia 6620
Nokia 6630
Nokia 6670
Nokia 6680
Nokia 6681
Nokia 6682
Nokia 7610
Nokia N70
Nokia N90
支持 Flash Lite 1.0 和 1.1 的设备如下:
http://www.macromedia.com/mobile/supported_devices/handsets.html
以下是 Flash Lite 2.0 还不支持的功能:
1,XMLSocket
2,Flash Media Server(Flash COM,FCS,FMS)通讯
3,远程共享对象 (Remote shared objects)
4,播放自己的视频格式(FLV)
5,AMF(Flash Remoting)
6,层叠样式表(CSS)
7,设备字体蒙罩
8,高质渲染圆滑的位图
在过去的一年里,对于开发人员来说使用flash与javascript通讯总会碰到一些麻烦的事情,从flash调用javascript函数已经没有什么问题了,因为我们可以使用getURL方法来直接调用,但是要想使用javascript返回flash在许多浏览器上几乎是不可能的。但是现在可以了。
Flash8的出现,这件事就变的比较容易了。J
The ExternalInterface API
之前我们使用flash调用javascript函数,一般使用这样的方法:
代码:
getURL(“javascript:alert(‘hello webstudio.com.cn’);”);
但是使用这种方法从flash调用javascript函数仍存在许多困难。特别是在处理多个javascript函数调用问题上。ExternalInterface
API可以与javascript实现无缝调用,并且它的能力达到可以在flash时间线使用。
在我们正式进入它的使用方法之前,我们需要确保在flash时间上可用,就要导入它的类向这样:
代码:
import flash.external.*;
现在它已经允许我们做的第一件事就是可以调用javascript函数了。
Call 调用方法
call方法对于ExternalInterface对象来说是一个静态方法,也就是说我们不需要使用ExternalInterface对象的实例来调用方法,我们可以直接通过对象类来调用,向这样:
代码:
ExternalInterface.call(functionName:String,Parameters);
这个方法有两个参数:
· functionName – 你想要调用的javascript函数名要以字符串的形式
· Parameters – 需要传递给javascript函数的参数,用逗号分开,是可选的。
...
完整阅读本文...]]>
(完)
输出后都是undefined
也就是说都没有被调用这个处理方法,但是用onClipEvent(data){}是可以trace的,也就是说问题已经解决了。
可是问题又来了,如果在类里我们怎么办呢,就只能用MovieClip.onData了。但是又不能调用,和jiagao讨论了一下,他也遇到了相同的问题。
想了一下,琢磨了一个简单的变态方法。方法如下 :
var pages = this.mc.createEmptyMovieClip("pages",0);
pages._x = 2;
pages.onLoad = function(){
trace(this._width);
}
pages.onEnterFrame = function(){
if(this.onLoad!=undefined&&this.onData!=undefined){
trace(pages.onLoad);
trace(pages.onData);
delete this.onEnterFrame;
}
trace(111);
}
pages.onData = function(){
trace(this._width);
}这样就没问题了,如果你不嫌麻烦的话就写一个extends MovieClip也可以。
(完)
//首先我们要导入EventDispatcher
import mx.events.EventDispatcher;
class testEvent extends MovieClip{
function testEvent(){
//在构造函数中初始化
EventDispatcher.initialize(this);
}
//定义这三个方法
function dispatchEvent(){}
function addEventListener(){}
function removeEventListener(){}
function sendOK(){
//定义事件onSend
var eventObj1:Object = {target:this,type:"onSend"};
dispatchEvent(eventObj1);
trace("OK");
//定义事件onComplete
var eventObj2:Object = {target:this,type:"onComplete"};
dispatchEvent(eventObj2);
}
}
怎么用我们的事件呢?往下看!
新建一个FLA,输入以下代码:
大家还记得UI组建的事件处理函数么,对这个和UI组建的差不多,都是addEventListener和removoeEventListener。
var testObj:testEvent = new testEvent();
var eventObj1:Object = new Object();
eventObj1.onSend = function(obj){
trace("type:"+obj.type);
}
var eventObj2:Object = new Object();
eventObj2.onComplete = function(obj){
trace("type:"+obj.type);
}
testObj.addEventListener("onSend",eventObj1);
testObj.addEventListener("onComplete",eventObj2);
testObj.sendOK();
ok!去定义你的事件吧。