这是高新技术等级考试Flash复习题中的一个问题,我在制作效果时没完全按照原题去做,主要是大家通过这个实例学会“用自定义类实现动画控制”的一些方法就行了。
一、定义类
在文本编辑器中输入以下的类定义代码,保存为:人.as
class 人 {
//属性定义
var 速度:Number = 1;
private var Personso:Sound;
public function 人(){
Personso = new Sound();
}
//移动MC的方法
public function 移动(mc:Object,轮:Object,方向:String):Void {
var root = this;
mc.onEnterFrame = function() {
if (方向 == "l") {
if (mc._x<0) {
mc._x = Stage.width; //如果已到舞台左边界,就跳到右边
}else{
mc._x -= root.速度;
}
轮._rotation -= root.速度;
} else if (方向 == "r") {
if (mc._x>Stage.width) {
mc._x = 0;
}else{
mc._x += root.速度;
}
轮._rotation += root.速度;
} else if (方向 == "s") {
delete this.onEnterFrame;//删除onEnterFrame,释放内存
}
};
}
//显示信息的方法
public function 信息():String {
return ("我们一起来学习Flash!");
}
//挥手的方法
public function 挥手(mc:MovieClip, hsx:Boolean):Void {
if (hsx) {
mc.gotoAndPlay(2);//挥手
} else {
mc.gotoAndStop(1);//手放下
}
}
//发声的方法
public function 发声(sou, 口:MovieClip):Void {
Personso.attachSound(sou);//加载库中的声音
Personso.start();
口.play();//发声的同时控制MC“口”的动画
}
}
几点说明:
1、我用了较多的中文变量名,以利理解,所以注释写得少;
2、关于方法(函数)——移动()
有三个参数
移动(mc,轮,方向)
mc 要左右移动的影片剪辑MC
轮 要让它旋转的影片剪辑
方向 用字符串来控制mc的移动方向:“l”向左,“r”向右,“s”停止
3、挥手的动作实质上是MC本身来完成的,函数里只是控制MC跳到相应的帧
4、调用发声方法有两个参数,传入库里链接的声音ID名;口形动作MC的路径和MC名。
二、制作场景上的mc和相关按钮
详情看源文件,以下是源文件第一帧的代码:
var MyPerson = new 人();
_root.onEnterFrame = function() {
_root.movv = MyPerson.速度;
}
this.左移.onRelease = function() {
MyPerson.移动(_root.Person_mc,_root.Person_mc.车轮,"l");
};
this.右移.onRelease = function() {
MyPerson.移动(_root.Person_mc,_root.Person_mc.车轮,"r");
};
this.停止.onRelease = function() {
MyPerson.移动(_root.Person_mc,_root.Person_mc.车轮,"s");
};
this.加速.onRelease = function() {
if (MyPerson.速度<100){
MyPerson.速度 += 1;
}
};
this.减速.onRelease = function() {
if (MyPerson.速度>1){
MyPerson.速度 -= 1;
}
};
this.信息.onRollOver = function() {
_root.Person_mc.information = MyPerson.信息();
};
this.信息.onRollOut = function() {
_root.Person_mc.information = "";
};
this.挥手.onRollOver = function() {
MyPerson.挥手(_root.Person_mc.右手, true);
};
this.挥手.onRollOut = function() {
MyPerson.挥手(_root.Person_mc.右手, false);
};
this.发声.onRelease = function() {
MyPerson.发声("QQ",_root.Person_mc.head);
};
这是被人骂得狗血淋头的帖子,有人说:屁大一个动作,写了N长的AS。
没办法,我就这水平了!
当然,单纯从实现效果来说,应该很简单,没必要写这么多的AS,可是,这是一个题:
1、定义“类”,存为AS文件。在类里实现点击相应按钮时:
1)人的左右移动 2)挥手动作 3)发声 4)动态文本信息显示等功能(动作)
2、制作相应按钮,制作Person_mc实例MC,并把头、身、左手、右手、左脚、右脚和动态文本框放入Person_mc。
口型的动作和下面轮子的动作是我加的,原题里没有。
这个例子并不是为了一个效果,而是为了学习“类”的一个实验。
看了一下,屁大一个动作,写了N长的AS,确实得改一下,请各位赐教!非常感谢!