主题:  用Flash制作游动的蛇——连载(2)

IT编辑

职务:普通成员
等级:6
金币:10.0
发贴:7769
#12002/7/2 12:55:49
接上一期:

4.设计Action影片。(大家可以先跳过这段代码,看下面的步骤)按快捷键Ctrl+F8新建一个名为“action”的影片剪辑。在“action”的场景里右键单击第1帧,选择Actions命令,在弹出的Actions Frame面板里输入如下代码:
tellTarget ("_root") {    //调用场景中所有的影片,希望大家记住这种用法
dx = getProperty("action", _x)-x1;
//得到影片“action”在X轴方向上的位移
dy = getProperty("action", _y)-y1;
//得到影片“action”在Y轴方向上的位移
point = Number(point)+1;    
//蛇的节数加1
if (Number(point)>Number(snake)) {
point = 0;
}
//当蛇的节数增加到默认值时,就把它重置为0,不让这只蛇无限变长
duplicateMovieClip("head", "head" add point, point);
        //复制“snake”影片,使蛇的节数不断增加
x1 = getProperty("action", _x);
//把影片“action”的x轴坐标赋值给变量x1
y1 = getProperty("action", _y);
//把影片“action”的y轴坐标赋值给变量y1
setProperty("head" add point, _x, x1);
//把变量x1的值赋值给影片“head”
setProperty("head" add point, _y, y1);
//把变量y1的值赋值给影片“head”
//以上代码实现了蛇的运动
//以下代码实现了蛇节角度的变化,从而使效果逼真
if (Number(dx) == 0) {
ror = 90;
//如果影片“action”在的坐标在x轴方向没有变化,则让影片“snake”的角度为90度。其实这也很好理解,因为蛇的头和节都是水平方向设计的,如果影片“snake”的x轴坐标不变,说明蛇在做垂直运动,“ror = 90;”就是让蛇的角度也变垂直。
//ror就是控制蛇节角度的变量
} else {
x = dy/dx;
    //这个x就是角度的正切值,大家只要画一个简单的示意图就明白了
if (Number(x)<0.99 and Number(x)>Number(-0.99)) {
    //如果角度值在(-1,1)之间就执行下面的语句
ror = x*40;
//本来应该用泰勒展开式计算这个角度值的,但考虑到可能有些朋友不会,所以就简单让它乘以40(也可以不乘),可是这样做蛇就不那么光滑了。还好,颜色可以帮忙,而且这条蛇也不是很大。^o^
} else if (Number(x) == 1) {
//很容易理解,如果角度值恒等于1就设角度为45度
ror = 45;
//由于篇幅原因,下面的语句我就不详细讲了,方法同上,大家自己理解吧
} else if (Number(x) == -1) {
ror = -45;
} else if (Number(x)>1.01) {
ror = 90-1/x*50;
} else {
ror = -90-1/x*50;
}
}
if (Number(dx)<0) {
ror = ror-180;
}
setProperty("head" add point, _rotation, ror);

}
5.    接着,右键单击第2帧,选择Actions命令,输入如下代码:
gotoAndPlay(1);    //构造回路