论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

Flash Magician

文章类别:Flash | 发表日期:2008-9-21 15:10:41

  
Flash Magician(序)
 
很兴奋你有意或者无意的看到这篇文章,假如你恰好对Adobe Flash有所了解,那么我保证你在这里能得到一些对你的Flash水平有所提高的东西,而你需要做的,就只是耐心的看完和Flash Magician相关的文章,然后自己去实践。相关的文章都将记录在这个blog里面。当然你也可以转载,不过请注明原作者。我是d2r,也是Extremania。
    写这些文章的目的很简单,不过请听我讲完我的小故事。我是2003年开始接触Flash,虽然没有小小,老蒋那些元老久,但是至少也算个中饼吧,我对自己的Flash水平很有信心,至少我不会像有些程序员把美工搞得一塌糊涂。当初接触Flash的理由很简单,有一个漂亮的MM说她喜欢Flash,我就去学,虽然我和那MM一直都没有见过,当然更谈不上发展了,而且我很爱我的老婆,扯远了。一开始我也是用Flash做做MTV,短剧之类的。因为专业是计算机,所以我很快就开始了解Action Script,发现了AS有着非常独特的魅力(我完全没有赞扬AS的意思,没有一个超只能的编辑器就让我BS它了)。在接触AS不到一个月,我就开始开发了第一个游戏(The Legend of ITown),也陆陆续续开发一些简单的游戏。在去年,开发了一个功能强大的摄像头工具PhotoShot;我也申请了一个域名blendmode.com(现在已经过期,被抢注了),开发“Eiei乐园”社区,不过由于找工作的原因,中途中止了。我在想,开发Flash应用到底为了什么呢?我得不到答案。当深入的思考下去的时候,却发现了国内的Flash界是多么的苍白,这点我也不在这里讨论。之前我也有去一家公司实习,专职做flash,公司给我开价是转正后2K5,在广州,要我开发像“易度”一个的社区。一个星期后,我便辞职了。从此对Flash没有任何激情,就算Flash CS3出了,我也没有安装(当然,我不懂AS3的)。说那么多,结论就是,我要放弃Flash了,而且我以前没有在Flash中捞到任何好处!在我放弃之前,我希望把我这几年来的经验,分享给大家,假如你对Flash AS编程还存在热情,我相信你会受益非浅的。这样我也弃得瞑目了。
    什么是Flash Magician呢?这是我对这系列文章的统称。我不是要出书,所以我很随意,我会没有结构性,没有深浅之分的罗列一些我的经验。我的经验不一定是符合AS的编程习惯的,但是我可以保证它能提高你的编程效率(不是运行效率),有时候你可以看到一些非常奇妙的动作,就像变魔术一样,你会感叹道,啊,原来Flash可以这样用的。其实这全靠AS这种不三不四的语言,在其他严密的语言你是用不了的。很多人说AS像什么语言像什么语言,我不想在这里引用,我觉得任何语言都有属于它自己特有的东西,在这里我会非常的尊重AS,会把它丑恶的一面尽量给美化掉。
    每一篇文章,我都会说一个主题,并且附上源代码。不过你就别指望我会附上fla文件了,自己体会出来不是更有成就感吗?假如确实需要,可以留下E-mail或者QQ跟我联系。我采用的是ActionScript2.0和1.0的语法,请大家不要介意,我对Flash编程再也没有发展的欲望,所以也没有去学习AS3,其实只要你了解了内涵,很轻易把代码转换成AS3的。我会写多少文章呢?可能有100篇吧,我对AS的体会实在太深刻了!大家也可以怀疑批评我的观点,不过别劝我纠正了,再强调一次,我已经放弃Flash了。
    这些文章适合任何学习Flash的人阅读,不过请了解一些基本的概念,比如怎么把类注册到MC上去之类的啊?我想我还是会解答大家提出的问题的,不过千万不要问我类似:“请问,loading怎么做呢?”之类的问题,我会超级bs你的。(哎呀,其实我一直很谦虚的,就让我自大一次吧。)
    最后,祝大家学习Flash愉快。
 
我的QQ:34199000
E-mail:extremania@126.com
blog地址:http://blog.sina.com.cn/netiod(netiod.com)
 
Flash Magician(1) 快速创建按钮
 
把这个话题放在第一位,其实没有什么非凡的含义,只是我实在太恨button这东西了,恨不得多骂它两句。
 
    从远古时代,这个所谓的button的东西就开始存在了。当时创建一个button要画上4帧,三个状态,还有一个点击的有效空间。后来知道了button其实只是一个MovieClip(MC),我就把button干脆换成一个两帧的MC,因为我不需要我的按钮那么生动活泼。不过每次都要在第一帧加个stop(),又要为每次按钮定义onRollOver和onRollOut事件,假如按钮有几十个,那都被烦死了。咳咳,先让我们来见识一下这个两帧的按钮。
 
(1)Ctrl+F8,新创建一个MC,名字就叫button_mc吧。
(2)MC简简单单,2个帧就行了。第一帧是按钮的初始状态,第二帧是鼠标划过的状态(如图)。
(3)好了,回到主影评,把button_mc拉到场景中,起名button_mc,在第一帧中插入代码:
==========================================================
button_mc.stop();



button_mc.onRollOver=function(){



 gotoAndStop(2);



}



button_mc.onRollOut=button_mc.onReleaseOutside=function(){



 gotoAndStop(1);



}



button_mc.onRelease=function(){



 //your code



}
==========================================================
代码的含义我就不解释了,不清楚的请先了解ActionScript的基础。要注重的是
button_mc.onRollOut=button_mc.onReleaseOutside这一句,假如你不这样些,那么你在按钮上按住鼠标左键,然后在按钮外面释放,就不能回到初始状态了。
 
(4)测试影片,一个简单的按钮功能已经完成了:)
 
 
说了那么多废话,终于要进入今天的主题了!
怎样快速构建一个按钮然后只写onRelease就可以完成按钮的基本功能呢?
为了让我们不用重复些onRollOver和onRollOut事件,我们可以把这些事件集合到一起,成为一个抽象的按钮。看看我们怎么构建一个抽象的按钮吧:
 
新建一个as文件,命名为AbstractButton.as(随你喜欢),保存在命名空间com.netiod.example下。代码如下:
=========================================================
class com.netiod.example.AbstractButton extends MovieClip {


 private var _enable:Boolean=true;


 private function AbstractButton() {


  this.onRollOver = this._rollover;


  this.onRollOut = this.onReleaseOutside=this._rollout;


 }


 private function onLoad() {


  this.stop();


 }


 public function toString():String {


  return "[Object, SimpleButton]"+" name:"+this._name;


 }


 private function _rollover():Void {


  if(!isEnable()) return;


  this.gotoAndStop(2);


  _extrollover();


 }


 private function _rollout():Void {


  if(!isEnable()) return;


  this.gotoAndStop(1);


  _extrollout();


 }


 //here are the interface for the subclass to extand the events


 public function _extrollover():Void{


 }


 public function _extrollout():Void{


 }


 //switch


 public function enable():Void{


  this._enable=true;


  this.useHandCursor=true;


 }


 public function disable():Void{


  this._enable=false;


  this.useHandCursor=false;


 }


 private function isEnable():Boolean{


  return this._enable;


 }


}
=========================================================
除了蓝色和红色的代码,其他基本上可以不去理会。可以看到,蓝色的代码正式实现了之前那个按钮的功能。而这段代码的精髓在于红色部分_extrollover_extrollout这两个函数,为按钮实现提供接口,使得onRollOver和onRollOut事件即使被复写(OverWrite,其实AS不提供规范的函数重载)也不会丢失变换状态功能。可能我的表达能力有限,这段描述有点难于理解。让我们看看一个真正的按钮是怎么实现的吧:
 
(1)按照第一个例子的1,2步创建button_mc。
(2)新建一个类型com.netiod.example.ImpButton(不再声明建类的过程)
代码如下:
=========================================================
class com.netiod.example.ImpButton extends com.netiod.example.AbstractButton {



 private function ImpButton(){



  _extrollover=moreOnRollOver;



  _extrollout=moreOnRollOut;



 }



 private function moreOnRollOver():Void{



  trace("onRollOver");



 }



 private function moreOnRollOut():Void{



  trace("onRollOut");



 }



 private function moreOnRelease():Void{



  //your code here



 }



}
=========================================================
*类的声明比较长,因为我没有设置classpath。
看红色代码,在这里实现了_extrollover_extrollout函数并不会覆盖onRollOver和onRollOut事件。
 
(3)将com.netiod.example.ImpButton类注册到button_mc上去。
(4)把button_mc拉到场景上,测试影片。
 
    怎样,将鼠标移到button_mc上去,button_mc能够转到第二帧同时又在输出面板能看到
"onRollOver"。没错,AbstractButton没有占用你的事件,但是可以让你快速创建一个按钮。
其实ImpButton的代码可以更少,甚至是一个空壳。当然,其实实践假如有共性,你也可以加
到AbstractButton上去,然后在提供修改接口。Enable和Disable也是非必要的,看你自己
的习惯。
 
    由于是第一篇,所以语言组织得不是很好,希望你能看懂里面的奥妙,将它运用到其他地方去。
 
源文件:
视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058