|
作者:Super-Tomato
上次转贴了一些物理的公式,在这里就应用一下作了个小球弹簧的效果,希望让大家有点启发
效果:
Flash: http://www.flash8.net/bbs/UploadFile/2005-1/2005127192823279.swf
步骤1:
在场景上画个圆,然后选择圆按F8,转换成Movieclip。注册点(Register point)选择中间
步骤2:
在圆形movieclip属性面板上加上instance name为ball
步骤3:
在场景第一个frame输入以下代码
//在2004版本需要先定义变量,当中包括了球的半径,摩擦力,重力,弹簧力,弹簧床的宽度高度等
width = ball._width/2+1;
v = 0;
grav = 2;
damp = 0.98;
k = 0.2;
left = 0;
right = 400;
top = 200;
bottom = 350;
out = false;
//当球按下时可拖动范围和out变量为false阻止球体计算球体下坠
ball.onPress = function() {
out = true;
startDrag(this, true, left+width, 0+width, right-width, bottom-width);
};
//当球放开的时候停止拖动动作和开始计算球体下坠的动作
ball.onRelease = function() {
out = false;
v = 0;
this.stopDrag();
};
//画出球体压着弹簧床时的图形
MovieClip.prototype.drawline = function(x, y) {
x1 = x-_root.width;
x2 = x+_root.width;
with (this._parent) {
clear();
beginFill(0x123456);
lineStyle(1);
moveTo(left, top);
curveTo(x1, top, x1, y);
lineTo(x2, y);
curveTo(x2, top, right, top);
lineTo(right, 350);
lineTo(left, 350);
lineTo(left, top);
endFill();
}
updateAfterEvent();
};
//球体离开弹簧床的时候还原床形
MovieClip.prototype.drawline_0 = function() {
with (this._parent) {
clear();
beginFill(0x123456);
lineStyle(1);
moveTo(left, top);
lineTo(right, top);
lineTo(right, 350);
lineTo(left, 350);
lineTo(left, top);
}
updateAfterEvent();
};
//定义两个空mc以画出弹簧床
_root.createEmptyMovieClip("line", 0);
_root.createEmptyMovieClip("line1", 1);
//当flash开始播放时的事件
_root.onEnterFrame = function() {
if (!out) { //当滑鼠没有拖动球体的时候,计算出球体下坠的位置(包括地心吸力)
v += grav;
v *= damp;
ball._y += v;
}
if (ball._y>top) { //当球的位置在弹簧床上的时候
v += (ball._y-top)*-1*k;
line.drawline(ball._x, ball._y);
} else { //当球的位置离开弹簧床的时候
line1.drawline_0();
}
};
当你熟悉了这些编写方法和物力计算之后,就可以加上角度的效果
Flash: http://www.flash8.net/bbs/UploadFile/2005-2/200521162326214.swf
[ Last edited by hahabin on 11-2-2005 at 02:29 AM ] |
|