as笔记。oop与算法。---3

      闪了一下 2004-7-13 18:33
第二章。面向对象编程技术。(oop)(六)

8。多态。所谓多态,就是允许不同的类赋予相同的属性或者方法。例如。DVD和VCD的构造不同。不同类
但是有共同的方法。播放。停止。。。那么分别给这两个类写播放函数。用同一个动作。但是内部处理语句不同。
9。开发自定义类。厉害!以。开发一个相册类为例。讲解类的定义。
10。分析。略。 给出所有源代码。大量注释应该看的懂。注意是mx的。
是在不懂的。复制粘贴到第一桢。
//////////////////////////////
//l类的定义。_global。全局的意思。就是说是个全局变量。
//强调。接受两个参数。一个是mc的名子。一个是数组名。。都不是数字哦!
/////////////////////////////

_global.photoalbum=function(mc_name,arr_name){
//photoalbum类的名子。不要与其他混淆
this.mc=mc_name;
//类的属性。我总以为是个指针。把传过来的mc名子赋给属性mc。
this.arr=arr_name;
//同上。数组名赋给相册属性arr.
this.arr_tot=this.arr.length-1;
//相册的照片总张数。由数组长度-1得到。arr不仅是属性。更是数组。(否则不会有length属性)
//为什么我认为arr是指针明白了吧?
this.showphotoat(0);
//方法。显示第0张照片。
};
//还要说明一点。photoalbum类有4属性。1方法。大家只看到3属性。还有index属性后边定义

/////////////
//方法的定义。注意。前缀。
/////////////
photoalbum.prototype.showphotoat=function(n){
//showphotoat是方法名。
if(n>this.arr_tot) n=0;
//以下三行实现n的值的限定。并且实现了一个小循环。n至大则置小
else if (n<0) n=this.arr_tot;
//n至小则置大。。深奥吧!哈哈
this.index=n;
//这里是photoalbum类的第4个属性。赋值并定义。
this.mc.loadMovie(this.arr[this.index]);
//重要的一句。全靠他来读取外部jpg.更加看出mc是影片剪辑。arr 是数组啦!
};

/////////////
//简 单的向前、向后翻页。只需要把index的值增加就行。注意index的赋值在方法showphotoat()中
///////////
photoalbum.prototype.next=function(){
this.showphotoat(this.index+1);
};
photoalbum.prototype.prev=function(){
this.showphotoat(this.index-1);
};

//////////
//以下语句创建相册。
//////////
this.createEmptyMovieClip("test",1);
//造空的mc

my_arr=["bild1.jpg","bild2.jpg","bild3.jpg","bild4.jpg","bild5.jpg"];
//数组放文件名。可以带地址url等。。。

myhoto=new photoalbum(test,my_arr);
//创建相册对象。。用mc名和数组名为参数!!
点击察看相册的一个例子。


哈!这个东西的数组是大了一点。哈哈。。不过。。
源文件才60k..。。swf才3.44k.


点击下载原文件
最后。改一下。使他符合2004的语法。

我又改了一下。。真正改为2004支持的类!
大家复制粘贴存为。photoalbum.as
注意一定要用这个名字!否则不会被读取的!

另外。这个文件一般放到与fla同一目录下。如果不。那就必须这样设置:
文件---〉发布设置---〉flash标签----〉as语言支持----〉as2.0
--->???(我查查。。嘻嘻)设置为你的as文件的目录。


class photoalbum{//类的定义关键字\class!as2才支持。要在文件-发布设置--把as1.0改为as2.0
var mc:MovieClip;
var arr:Array;
var arr_tot:Number;
var index:Number;

//构造函数。必须与类名相同。上边的class只是声明.
//photoalbum类的名子。不要与其他混淆
function photoalbum(mc_name:MovieClip,arr_name:Array){
this.mc=mc_name;//类的属性。我总以为是个指针。把传过来的mc名子赋给属性mc。
this.arr=arr_name;//同上。数组名赋给相册属性arr.
this.arr_tot=this.arr.length-1;
//相册的照片总张数。由数组长度-1得到。arr不仅是属性。更是数组。(否则不会有length属性)
//为什么我认为arr是指针明白了吧?
this.showphotoat(0);
//方法。显示第0张照片。
};//这里注意";"

/////////////
//方法的定义。注意。前缀。
/////////////
{
function showphotoat(n:Number){
//showphotoat是方法名。
if(n>this.arr_tot) n=0;
//以下三行实现n的值的限定。并且实现了一个小循环。n至大则置小
else if (n<0) n=this.arr_tot;
//n至小则置大。。深奥吧!哈哈
this.index=n;
//这里是photoalbum类的第4个属性。
this.mc.loadMovie(this.arr[this.index]);
//重要的一句。全靠他来读取外部jpg.更加看出mc是影片剪辑。arr 是数组啦!
};

/////////////
//简 单的向前、向后翻页。只需要把index的值增加就行。注意index的赋值在方法showphotoat()中
///////////
function next(){
this.showphotoat(this.index+1);
}

function prev(){
this.showphotoat(this.index-1);
}
}

说一下用法。一定要把以上代码保存为photoalbum.as不允许别的名字。因为文件名必须与类名相同。
然后

新建一个文件保存与photoalbum.as同一目录。不在同一目录也可。但是要 文件--输出设置---flash.---
把动作脚本改为2。0。点---设置---在出现对话框中添加。。找到你存放*.as的路径--确定。

因为这样设置好了。flash2004在编译fla文件时。会先读取类。。所以在fla文件中只要添加这么几句话
//////////
//以下语句创建相册。
//////////
this.createEmptyMovieClip("test",1);
//造空的mc
test._y=30;//用来留出空来放按钮。

my_arr=["bild1.jpg","bild2.jpg","bild3.jpg","bild4.jpg","bild5.jpg"];
//数组放文件名。可以带地址url等。

myphoto=new photoalbum(test,my_arr);
//创建相册对象。。用mc名和数组名为参数!!。。。测试就行了。
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}