|
首页 | 名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
AsBroadcaster看不到原文件,这个跟那个差不多,只有一点不同,可以研究一下广播是怎么实现的。 以下内容为程序代码: class mx.transitions.BroadcasterMX {
#include "Version.as" //版本信息 private var _listeners:Array; //_listeners列表 static function initialize (o:Object, dontCreateArray:Boolean) { /* 静态方式initialize(),用来把参数o变成事件源 dontCreateArray这个参数假如设置为true则不给o创建_listeners数组,偶不知道为什么有这个参数, 貌似不给o创建_listeners数组,广播就没有用了。哪位高人知道为什么,希望给我解释解释。。 */ if (o.broadcastMessage != undefined) delete o.broadcastMessage; //假如对象o已经存在broadcastMessage,则删除 o.addListener = mx.transitions.BroadcasterMX.prototype.addListener; //使o对象具有addListener方式,见后边知识点1 o.removeListener = mx.transitions.BroadcasterMX.prototype.removeListener; //使o对象具有removeListener方式,见后边知识点1 if (!dontCreateArray) o._listeners = new Array(); //_global.ASSetPropFlags (o, "addListener,removeListener,_listeners", 1); //隐藏addListener,removeListener,_listeners } function addListener (o:Object):Number { //填加兼听者,送给监听者一个broadcastMessage方式,并把他填到广播器的订阅列表_listensrs中 this.removeListener (o); if (this.broadcastMessage == undefined) { this.broadcastMessage = mx.transitions.BroadcasterMX.prototype.broadcastMessage; //_global.ASSetPropFlags (this, "broadcastMessage", 1); } return this._listeners.push(o);//这里返回数组长度 } function removeListener (o:Object):Boolean { //从广播器列表中删除一个监听器 var a:Array = this._listeners; var i:Number = a.length; //这里用while没用for,就是遍利列表,从中删除o,假如列表空了,就把broadcastMessage也删了 while (i--) { if (a[i] == o) { a.splice (i, 1); if (!a.length) this.broadcastMessage = undefined; return true; } } return false; } function broadcastMessage ():Void { //发出广播函数 var e:String = String(arguments.shift()); //将传入的第一个参数转变成String类型,这个参数应该是个函数名,见后边知识点2 var a:Array = this._listeners.concat(); //concat方式参数为空的时候返回数组的副本(见帮助) var l:Number = a.length; for (var i=0; i<l; i++) a[i][e].apply(a[i], arguments); //遍利列表执行函数,并把参数传过去,apply用法见知识点3 } }; 知识点:1. 以下内容为程序代码: function A(){
B:写在函数的原型-prototype上this.myFunc = function(){trace("A.myFunc");} } 以下内容为程序代码: function B(){
} B.prototype.myFunc = function(){ trace("B.myFunc"); } 到了as2中: 以下内容为程序代码: class a{
这个haha方式写到哪了呢?经过h人提点,看了看asv,答案果然是h人所说的,写在prototype上的,相称与B的写法.function haha(){ trace(".......") } } 知识点:2. 调用函数的时候,会在函数内部自动生成一个argments对象,这个对象是你传入函数的所有参数组成的数组。 arguments.shift()是数组的第一个元素。 知识点:3. apply是Function类的方式,也就是说所有的function都有这个方式。这个方式使一个函数在另一个域中工作,不知道描述对不- -b看例子吧 以下内容为程序代码: a = {};
明白点了吧,
a.toString = function() { return "我是a"; }; function 函数() { trace(this); trace(arguments); } 函数(1, 2, 3); //输出:_level0 1,2,3 函数.apply(_root, [1, 2, 3]); //输出:_level0 1,2,3 函数.apply(a, [1, 2, 3]); //输出:我是a 1,2,3 for (var i=0; i<l; i++) a[i][e].apply(a[i], arguments);
看这个是类中最后遍历那段,遍历列表,a[i]为监听器列表中的每个元素,a[i][e]就是是每个对象的e方式,a[i][e].apply(a[i]),就是在a[i]域中执行a[i][e]方式,别忘了把参数传过去,就这样了。a[i][e].apply(a[i], arguments)。好了完了,上边有个问题谁给回答了~谢谢 返回类别: Flash教程 上一教程: FlashMX 视频教程(29)-实例8绘制气球 下一教程: 教你用FLASH做美丽的飞鸟效果动画 您可以阅读与"Flash AS学习:深入BroadcasterMX"相关的教程: · Flash ActionScript学习:深入研究条件语句 · Flash5 ActionScript入门学习-Action Script基本语法1 · Flash MX 2004新特性实例学习四 · Flash ActionScript学习:初识条件语句与变量 · Flash AS学习:mx.utils包之Delegate类应用 |
快精灵印艺坊 版权所有 | 首页会员中心在线印刷在线编辑付款方式索取样品设计指南连锁门店 |