仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 881|回复: 8
打印 上一主题 下一主题

[学习教程] 来谈谈:FLASH教程ActionScript初级技能-深切懂得Function

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-15 22:42:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Macromedia公司已经承诺在Flash8中将有很大的变化,而且它们中的许多都与视频功能有关。
Function事实是甚么?
我们习气了function的存在,就像习气了我们呼吸的氛围却不往探求它的实质。看起来,仿佛function和Number,Boolean,String一样都是ActionScript原本就有的范例

先看以下代码:

trace(aFunc);//输入:[typeFunction]
trace(aFuncinstanceofFunction);//输入:true
trace(aFuncinstanceofObject);//输入:true

functionaFunc(){
trace(“ThisisaFunc!Excuted!”);
}第一行告知我们aFunc的范例是Function,第二行又证明了这一点aFunc的确是一个Function范例的实例,第三行加倍成心思告知我们aFunc是一个Object。

初学者大概很惊异,实在AS2.0中除原始数据范例Number,Boolean,String,undefined,null,其他满是Object.而AS3.0中则加倍极度,统统皆工具。包含原始数据范例也是Object,只不外是特别的稳定工具(immutableobjects)范例。与主题扯远了,打住。:D
Function实质上究竟是如何的一种Object?
与其他编程言语分歧,在AS中,Function是一个Object,能够有自力的属性乃至办法。好比arguments,callee,caller。在AS3.0中,Function还由更多的属性。
函数一旦实行,一个特别的工具就创建了。我们称它为"activeobject",它含有以上的属性和当地变量。这个工具我们是不成会见的,属于内建的机制。同时,每一个Function都含有一个内置的局限链(scopechain),这时候也将被创建,以使FlashPlayer来反省一切的声明。函数能够层层嵌套,局限链也是云云。最年夜的局限链那固然是Global函数的局限链了,包含一切的全局变量和函数。


晓得了Function是Object又如何?
会给我们带来极年夜的便当和编程头脑的改动:
使用一:这是复杂使用,设立一个代办署理函数工具,依据前提的分歧,将它指向分歧的函数,完成静态改动。信任有履历的程序员都懂得静态改动函数的便当性。并且因为AS供应了这类便当,使用这个特征能够衍生大批技能。
<fontface="LucidaConsole"size=
[1]200606/2541_2.html>[2]200606/2541_3.html>[3]200606/2541_4.html>[4]200606/2541_5.html>[5]200606/2541_6.html>[6]200606/2541_7.html>[7]200606/2541_2.html>下一页


"2">
varkingdaFunc:Function;
varsex:String="male";
if(sex=="male"){
kingdaFunc=maleFunc;
}else{
kingdaFunc=femailFunc;
}
kingdaFunc();//输入:Iamaboy

functionmaleFunc(){
trace("Iamaboy");
}
functionfemaleFunc(){
trace("Iamagirl");
}
</font>使用二:创建函数实行行列。
好比说,我有一个工具,我想依据分歧的情形对它举行一系列的操纵。可是偶然必要一切的操纵,偶然又只必要一部分的操纵。那末这个较初级的技能,就可以包管代码的高度重用性和简便。
<fontface="LucidaConsole"size="2">
varfuncAry:Array=newArray();

//将必要的操纵步骤到场行列
funcAry.push(aFunc);
funcAry.push(bFunc);
funcAry.push(cFunc);

//供操纵的工具
varoriginObject:Object=newObject();

//必要实行几步由execQueue这个参数决意,在实践工程使用中这个数多是静态决意的。
varexecQueue:Number=funcAry.length;

/中心步骤:/函数行列实行。实践使用中能够把它包装成一个函数,大概一个类的实例。
for(vari:Number=0;i<execQueue;i++){
funcAry(originObject);
}

//trace出实行操纵后的originOb</p>
200606/2541.html>上一页200606/2541.html>[1][2]200606/2541_3.html>[3]200606/2541_4.html>[4]200606/2541_5.html>[5]200606/2541_6.html>[6]200606/2541_7.html>[7]200606/2541_3.html>下一页


ject内里的内容
for(variinoriginObject){
trace(i+":"+originObject);
}

//操纵步骤a,b,c
functionaFunc(eO:Object){
eO.aFuncExected=true;
trace("aFunc()");
}
functionbFunc(eO:Object){
eO.bFuncExected=true;
trace("bFunc()");
}
functioncFunc(eO:Object){
eO.cFuncExected=true;
trace("cFunc()");
}
</font>输入内容为:
<fontface="LucidaConsole"size="2">
aFunc()
bFunc()
cFunc()
cFuncExected:true
bFuncExected:true
aFuncExected:true
</font>前三行标明a,b,c三个函数按按次实行了。后三行标明orginObject的确经由了三步操纵,多了三个为true的属性。

黑羽提示:技能能够再延深!
能够经由过程一个函数来办理行列内里各个元素的地位,到达改动操纵函数的按次。好比经由过程一个数组来布置挪用按次
<fontface="LucidaConsole"size="2">
varoperationAry:Array=[2,1,0]
for(vari:Number=0;i<operationAry.length;i++){
funcAry[operationAry](originObject);
}
</font>如许函数就经由过程2,1,0如许的倒序来实行操纵。

这个技能还
200606/2541_2.html>上一页200606/2541.html>[1]200606/2541_2.html>[2][3]200606/2541_4.html>[4]200606/2541_5.html>[5]200606/2541_6.html>[6]200606/2541_7.html>[7]200606/2541_4.html>下一页


有良多能够延长的中央,好比说静态把持操纵函数的参数等等,供人人本人研讨扩大。

</P>呵呵,上篇帖子人人反应不错,短短几天被几家网站转载。
空话少说,此次持续前次话题。看看人气情形,假如人人喜好我这个初级技能专题,那末往后会连续公布一些我本人这几年来项目开辟条记中的有用技能。
使用函数前往函数:
有一个proxyObject工具,我们但愿依据proxy工具的内容来断定一个办法,来处置myObject工具。
当proxyObject是字符串时,我们又但愿依据它字符串的内容来断定前往分歧的函数(或办法)。这些函数参数和范例是不完整不异的,有的多是一个参数,有的多是多个参数,分歧范例。
那末传统的办理办法:在函数外部挪用其他函数就显得力所能及。即便办理,也不如我上面chooseFuncBy()这个函数简便。
弱点固然有,那就是对照天真,你必定要分明办理好每一个方针函数和判别逻辑。由于这类天真的编程体例编译器是没法反省,不克不及查出范例不婚配这类毛病的。菜鸟慎用。
//经由过程A挪用只要一个参数的aFunc():
chooseFuncBy("A")("Afunchasonlyoneparameter.");
//输入:aFunc():Afunchasonlyoneparameter.
//经由过程B挪用有两个参数的bFunc():
chooseFuncBy("B")("Bfunchastwoparameters.","No.2parameter");
//输入:bFunc():Bfunchastwoparameters.onemoreParameter:No.2parameter
//字符串不符,默许函数
chooseFuncBy("wulala")("IchooseAfunction");
//输入:WelcometoKingda.org!Myblog
varwithObj:Object=newObject();
varmyObj:Object={name:"黑羽",blog:"http;//www.kingda.org",hobby:"Starcraft"};
chooseFuncBy(withObj)(myObj);
/*输入:
objectFunc():
name:黑羽
blog:http;//www.kingda.org
hobby:Starcraft
*/
functionchooseFuncBy(inputString):Function{

//使用一:使用参数的品种</p>
200606/2541_3.html>上一页200606/2541.html>[1]200606/2541_2.html>[2]200606/2541_3.html>[3][4]200606/2541_5.html>[5]200606/2541_6.html>[6]200606/2541_7.html>[7]200606/2541_5.html>下一页


来断定前往的函数
if(!(typeof(inputString)=="string")){
returnobjectFunc;
}

//使用二:依据参数内容来前往函数
switch(inputString){
case"A":
returnaFunc;
case"B":
returnbFunc;
default:
returnkingdaFunc;
}
//更多延长使用:使用参数个数、instanceof断定分歧Class的实例来选择函数等等
}
functionaFunc(nS:String):Void{
trace("aFunc():"+nS);
}
functionbFunc(nS:String,nP:String):Void{
trace("bFunc():"+nS+"onemoreParameter:"+nP);
}
functionkingdaFunc():Void{
trace("WelcometoKingda.org!Myblog");
}
functionobjectFunc(kingdaObj:Object):Void{
trace("objectFunc():");
for(variinkingdaObj){
trace(i+":"+kingdaObj);
}
}如前次所说,函数也是一个Object,不但云云,函数Object也能够静态增加属性和办法。
函数静态增加属性
使用一:使用函数静态属性来盘算函数挪用次数
固然你完整能够用这个技能来干更多更有效的事,我只是举一反三开个头。:)
一个游戏中有开仗函数shot()。我想晓得统共开仗了几次,那末可使用shot函数的属性times。
总的来讲,关于AS2.0来讲,这是一个不太好的编程习气,固然很便利。但因为静态属性的利用使得编译器没法举行范例反省,也使的年夜项目标出错大概性增添。
关于AS1.0来讲,与其利用Global变量,如
200606/2541_4.html>上一页200606/2541.html>[1]200606/2541_2.html>[2]200606/2541_3.html>[3]200606/2541_4.html>[4][5]200606/2541_6.html>[6]200606/2541_7.html>[7]200606/2541_6.html>下一页


_root,_level1,那末我宁肯倡议你利用这个编程技能。总比Global变量来的平安,不容易发生抵触和蛛网效应。</P>注重,援用shot函数静态属性时,在函数内不克不及利用this.times,那不会指向函数自己的属性。只能利用函数名加属性,例:shot.times
shot.times=0;//初始化times
shot();//输入:Shot():times:1
shot();//输入:Shot():times:2
shot();//输入:Shot():times:3
functionshot():Void{
shot.times++;
trace("Shot():times:"+shot.times);
//shot的其他代码放在这儿
}函数工具静态增加办法
对了,更风趣的就是增加办法了。
函数这么一玩弄以后,Function工具成了二不像:不像一般类实例,也不像一个函数。这个技能可让我们的函数变得很壮大,也会让它更庞大难以办理。
双刃剑阿,本人权衡着办吧。
我的倡议是AS1.0能够稍多一点自创这个技能,AS2.0用户应该只管利用尺度办理体例。在小的局限内能够为了便利而使用,毫不同意年夜局限年夜范围的利用。
shot.times=0;
shot.reload=function(){
trace("reload:"+this.times);
if(this.times>3){
this.times=0;
}
}
shot.reload();
shot();
shot();
shot();
shot();
shot();
shot();
functionshot():Void{
shot.times++;
trace("Shot():times:"+shot.times);
shot.reload();
//shot的其他代码放在这儿
}
/*输入:
reload:0
Shot():times:1
reload:1
Shot():times:2
reload:2
Shot():times:3
reload:3
Shot():times:4
reload:4
Shot():times:1
reload:1
</p>
200606/2541_5.html>上一页200606/2541.html>[1]200606/2541_2.html>[2]200606/2541_3.html>[3]200606/2541_4.html>[4]200606/2541_5.html>[5][6]200606/2541_7.html>[7]200606/2541_7.html>下一页


Shot():times:2
reload:2
*/写在篇尾的话:能够看出,使用静态增加属性和办法的技能,可使Function这个特别的器材非常壮大起来。并且其天真水平更是绝后,试想假如静态增加的办法能够前往函数(见第一个技能)。不要忘了,静态增加的办法能够间接会见函数的输出参数,那末其衍生的技能又有几种呢?函数又能够酿成如何的一种强无力的编程工具呢?只要想不到,没有做不到。这就是Function给我们展现的无量天真性。
可是,我仍是要说,技能终回是技能,它有其两面性。天真是它的长处,也是它的弱点。小局限的使用让你爽利非常;年夜项目中年夜局限的利用,除非你办理的很好,否则会让你头疼欲裂逝世尔后快。
通读AS2.0一切公然的类的代码后,你会发明Macromedia的程序员也利用了上述的技能。只需办理的好,这相对是ActionScript的长处地点。
AS2.0coder们,欢乐之余,慎之又慎!
(全文完)
P.S有人问我为何不写写argument,callee,caller等方面的技能,我的设法是这些在匡助中写的很分明,人人能够本人看。而这些相干的技能,文章已有很多,看看其提高水平已不克不及算初级技能了,以是不再赘述!
200606/2541_6.html>上一页200606/2541.html>[1]200606/2541_2.html>[2]200606/2541_3.html>[3]200606/2541_4.html>[4]200606/2541_5.html>[5]200606/2541_6.html>[6][7]


这个播放器非常小,只需花一点点时间下载,对于在体验网页上的多媒体效果是个很好的开始。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-17 18:20:32 | 只看该作者
用户在观看广告的时候,无法通过正常点击鼠标来查看广告的尺寸、字节数、所链接的URL广告本身信息。
不帅 该用户已被删除
板凳
发表于 2015-1-25 20:31:36 | 只看该作者
假设一个Web设计者需要让一页上的不同元素之间相互作用。如果其中的一些元素出现在Box内,而另一些在Box之外,那么设计者就很不幸。
柔情似水 该用户已被删除
地板
发表于 2015-2-4 04:45:50 | 只看该作者
Flash也可以合成简单的JavaScript函数。如果你学过某种脚本语言如JavaScript或者Macromedia的Director Lingo,你会知道这有点令人畏缩。
蒙在股里 该用户已被删除
5#
发表于 2015-2-9 15:58:39 | 只看该作者
FLASH的优点~你用眼睛所看到的东西~都能用它来实现~一点不夸张~高楼大厦-花草树木-高山流水-天空白云-阿猫阿狗-一切活的东西都可以容入到FLASH里面
精灵巫婆 该用户已被删除
6#
发表于 2015-2-27 10:19:04 | 只看该作者
Flash是一种以向量图方式制成的网页动画,相比MPEG,AVI等的影片的档案大小就小很多.
乐观 该用户已被删除
7#
发表于 2015-3-9 05:49:39 | 只看该作者
对插件的批评之一是他们一般出现在称为Box的网页的一个预定的区域。虽然在某种情况下表现不错,但Box经常以罪魁祸首的面目出现。
海妖 该用户已被删除
8#
发表于 2015-3-17 00:07:55 | 只看该作者
现在FLASH不是也可以调用后台数据库了么~在过几年没准可以通过FLASH来实现远程控制呢~(有点假了~呵呵)我了解的FLASH优点应该就是第一段那些了~缺点暂时想不出太多了~
第二个灵魂 该用户已被删除
9#
发表于 2015-3-23 09:58:27 | 只看该作者
流技术让用户在下载的同时看到动画(与全部下载后再观看相反)。但是这也不是什么新技术 - Web一出现就有这种技术了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 06:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表