×

关注微信公众号

免备案网站空间虚拟主机双线空间域名查询PS数码后期
photoshop互助课堂数百G视频教程下载英语培训机构初中英语如何学随时随地聆听大师开讲/课堂
酷素材!视频教程打包下手绘教程抠图教程路径专辑photoshop cs3视频教程
查看: 8682|回复: 13

[AS] 学习AS3.0菜鸟起飞吧六:类的编写(如何将时间轴上的代码转换为外部类)[原创][教程库]

[复制链接]
发表于 2009-4-21 13:33:49 | 显示全部楼层 |阅读模式
本帖最后由 xyl7422 于 2009-8-7 04:59 编辑

我们已经了解了在Flash CS3 中如何在时间轴上编写代码,那么如何将时间轴上的代码转换为外部类,以及Flash CS3 的文档类形式,接下来我们进一步的来研究编写类及外部as文件的方式。

include

如果你了解AS1.0,AS2.0 编程,那么对include一定不陌生,在Actionscript 3.0中我们仍可以使用include 来导入代码。

例:

1、打开flash新建一个文档。保存为drag_inclue.fla在场景中创建一个影片剪辑,本例中使用的小球,将其转换为影片剪辑,并在场景中将其命名为circle_mc。 不需要在库中设置链接属性。

2、新增一层,按下F9打开动作面板,输入代码如下:

代码:  

//设置当光标移到circle_mc上时显示手形
circle_mc.buttonMode = true;
// 侦听事件
circle_mc.addEventListener(MouseEvent.CLICK,onClick);
circle_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
circle_mc.addEventListener(MouseEvent.MOUSE_UP,onUp);
//定义onClick事件
function onClick(event:MouseEvent):void{
     trace("circle clicked");
}
//定义onDown事件
function onDown(event:MouseEvent):void{
     circle_mc.startDrag();
}

function onUp(event:MouseEvent):void{
     circle_mc.stopDrag();
}

3、将此帧上的代码全部选中,按下ctrl+x剪切,新建一个Actionscript文件,将剪切的代码贴上。保存名为drag_include.as。与drag_include.fla 在同一路径下。

4、回到drag_include.fla中,在第一帧上输入如下代码:
include "drag_include.as"

测试影片即可以看到与时间轴上测试时相同的结果了。此方式,在AS1.0 时经常使用。如果你仍习惯这种方式,在Actionscript 3.0中仍可以使用。

元件类(symbol class)

      这里所说的元件类,实际是指为flash影片中的元件指定一个链接类名。它与上面的include 的不同之处在于,它使用的是严格的类结构。而不是我们习惯上的时间轴编写方式。我们要将小圆球的拖动功能封装起来,这样不论你创建多少可以拖动的小球,都会变得很轻松,只需要创建它的实例并显示出来即可。
     我们仍使用上例来说明:打开drag_include.fla文件,将其另存为Symbol_class.fla文件,新建一个Actionscript文件,将其保存为Symbol_class.as文件,与Symbol_class.fla文件在相同目录下。现在我们将上面的例子中的代码抽象成类如下:

代码:

package {
     
     import flash.display.MovieClip;
     import flash.events.MouseEvent;
     public class Symbol_class extends MovieClip {
         public function Symbol_class(){
            
             this.buttonMode = true;
             this.addEventListener(MouseEvent.CLICK,onClick);
             this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
             this.addEventListener(MouseEvent.MOUSE_UP,onUp);
            
         }
         private function onClick(event:MouseEvent):void{
             trace("circle clicked");
         }
         private function onDown(event:MouseEvent):void{
             this.startDrag();
         }
         private function onUp(event:MouseEvent):void{
             this.stopDrag();
         }
     }
}

   因为我们将类的名称设置为Symbol_class,所以类文件一定要保存为Symbol_class.as文件。我们还要做一步工作,在源文件中打开库面板,右键链接,类名:Symbol_class即让我们类与元件相关连。此时测试影片,你会看到与上例中相同的结果。注意:场景中仍要保证circle_mc的存在。因为在代码中我们并没有动态的添加circle_mc。同时这个例子中,与上例一样,我们并没有使用AS3.0的文档类。

[ 本帖最后由 sanbos 于 2009-4-22 16:47 编辑 ]
本帖的地址:http://bbs.jcwcn.com/forum.php?mod=viewthread&tid=242415
跟着教程做一遍,做完的图要到这里评论交作业,教程有看不懂的地方,可以在贴子下面评论

本帖子中包含更多资源

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

x

评分

参与人数 3金币 +15 威望 +1 热心度 +4 收起 理由
祁连山 + 1 支持原创教程,辛苦啦.
xyl7422 + 7 + 2 感谢原创教程,老师辛苦啦:)
sanbos + 8 + 2 多谢教程

查看全部评分

发表于 2009-4-21 15:40:37 | 显示全部楼层
酷素材
交一个笔记上来。请老师指正一下哈!看我的认识和理解有什么不对的地方。
元件类(symbol class)的写法笔记:

package {
     
     import flash.display.MovieClip; //导入MovieClip类
     import flash.events.MouseEvent; //导入MouseEvent类
     public class Symbol_class extends MovieClip { //==这里继承的是:MovieClip,所以应该建立元件为影片剪辑,影片剪辑元件在库里的链接名为:Symbol_class
         public function Symbol_class(){//===========这里的函数名是:Symbol_class 所以下面的 this 指向的就是 Symbol_class
            
             this.buttonMode = true; //使手型显示出来
//------------------------以下为监听函数---------------------------------------
             this.addEventListener(MouseEvent.CLICK,onClick);
             this.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
             this.addEventListener(MouseEvent.MOUSE_UP,onUp);
            
         }
         private function onClick(event:MouseEvent):void{
             trace("circle clicked");
         }
         private function onDown(event:MouseEvent):void{
             this.startDrag();
         }
         private function onUp(event:MouseEvent):void{
             this.stopDrag();
         }
     }
}

谢谢批阅一下!!
回复 支持 反对

使用道具 举报

发表于 2009-4-21 16:08:05 | 显示全部楼层
在 元件类(symbol class)  的基础上,如果在场景里加一个动态文本txt_txt,并在文本里显示鼠标事件,如何写?
即如何把下面的幀代码,改写为外部类:aa_mc 是影片剪辑实例名,txt_txt 是动态文本实例名。
  1. aa_mc.buttonMode = true;
  2. // 侦听事件
  3. aa_mc.addEventListener(MouseEvent.CLICK,onClick);
  4. aa_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
  5. aa_mc.addEventListener(MouseEvent.MOUSE_UP,onUp);
  6. //定义onClick事件
  7. function onClick(event:MouseEvent):void{
  8.      txt_txt.text ="点击我了!";
  9. }
  10. //定义onDown事件
  11. function onDown(event:MouseEvent):void{
  12.      txt_txt.text ="鼠标按下了,可以拖我了!";
  13.              aa_mc.startDrag();
  14. }
  15. //定义onUp事件
  16. function onUp(event:MouseEvent):void{
  17.      txt_txt.text ="鼠标松开了!";
  18.      aa_mc.stopDrag();
  19. }
复制代码
还有一个怪现象:
用上面的幀代码做的fla文件,当用cs3打开时正常。用CS4打开时却报错。
不知道是什么原因!!!

[ 本帖最后由 sunshijiu 于 2009-4-21 20:25 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-4-21 21:08:20 | 显示全部楼层
写了一个外部类的,请指正一下:
  1. package {
  2.         import flash.display.MovieClip;
  3.         import flash.events.MouseEvent;
  4.         import flash.display.SimpleButton;
  5.         import flash.text.*;

  6.         public class sb extends MovieClip {
  7.                 public function sb() {
  8.                         aa_mc.addEventListener(MouseEvent.CLICK,onClick);
  9.                         aa_mc.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
  10.                         aa_mc.addEventListener(MouseEvent.MOUSE_UP,onUp);
  11.                 }
  12.                 //定义onClick事件
  13.                 function onClick(event:MouseEvent):void {
  14.                         txt_txt.text ="点击我了!";
  15.                 }
  16.                 //定义onDown事件
  17.                 function onDown(event:MouseEvent):void {
  18.                         txt_txt.text ="鼠标按下了,可以拖我了!";
  19.                         aa_mc.startDrag();
  20.                 }
  21.                 //定义onUp事件
  22.                 function onUp(event:MouseEvent):void {
  23.                         txt_txt.text ="鼠标松开了!";
  24.                         aa_mc.stopDrag();
  25.                 }
  26.         }
  27. }
复制代码
效果如下:当作作业!


[ 本帖最后由 sunshijiu 于 2009-4-21 21:11 编辑 ]

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-22 09:20:16 | 显示全部楼层

回复 地板 sunshijiu 的帖子

酷素材
做得不错,理解上没有问题。 上面讲得是类绑定的例子,在舞台上有一个影片剪辑元件。绑定的类是Symbol_class。这个类继承自MovieClip,在舞台上所有影片剪辑元件,都会看成是Symbol_class类的实例。不认是手工从元件库中拖到舞台上,还是用代码生成,都一样被看成Symbol_class类实例。
回复 支持 反对

使用道具 举报

发表于 2009-7-8 06:05:31 | 显示全部楼层
酷素材
上面定的的是文档类(点击我了),不是链接类啊
回复 支持 反对

使用道具 举报

发表于 2012-2-10 15:38:21 | 显示全部楼层
顶。顶。谢谢楼主。
回复 支持 反对

使用道具 举报

发表于 2013-1-10 19:14:17 | 显示全部楼层
学习了,多谢!
回复 支持 反对

使用道具 举报

发表于 2014-11-25 21:34:25 | 显示全部楼层
认真学习,好好领会。
回复 支持 反对

使用道具 举报

发表于 2018-7-10 12:48:18 | 显示全部楼层
很不错。。。
回复 支持 反对

使用道具 举报

发表于 2018-7-10 12:42:26 | 显示全部楼层
顶顶多好
回复 支持 反对

使用道具 举报

发表于 2018-7-10 13:23:07 | 显示全部楼层
真心顶。。。。
回复 支持 反对

使用道具 举报

发表于 2018-7-10 12:32:17 | 显示全部楼层
难得一见的好帖
回复 支持 反对

使用道具 举报

发表于 2018-7-10 12:46:24 | 显示全部楼层
楼主我支持你
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | [立即注册]

本版积分规则