onClipEvent(load){//影片加载一次
v=5;
}
onClipEvent(enterFrame){//进入贞
_x+=v;
if(_x>400){
_x=0; //当MC超出舞台的位置,我们就把就要重新设置MC的起始位置
}
}
//根据公式:x=x0+v*t, "t"表示影片每次调用enterFrame事件次数,场景中的MC的_x位置都会增加一个变量V(V=5,加载时初使化的值),同理:第10次调用enterFrame事件后x=x0+v*10
看效果:
下载源文件(zip压缩文件, 2.22K):点击下载
onClipEvent(load){//影片加载一次
v=1;
a=3;
}
onClipEvent(enterFrame){//进入贞
v+=a; //v=v0+at
_x+=v; //x=x0+vt;
if(_x>400)
_x=0; //当MC超出舞台的位置,我们就把就要重新设置MC的起始位置
}
// 影片每次调用enterFrame事件,变量“V”不断累积的增加变量“a”,速度越来越大,所以以便剪辑“MC”的移动速度越来越高,每当“MC”超过舞台的范围时(_x>400)就会重设到最左边(_x=0);由于速度太快,时间长了剪辑“MC”就看似停下来了
onClipEvent(load){
r=100; //半径
rad=0;
y0=_y; //y的平衡位置
}
onClipEvent(enterFrame){
_y=y0+Math.sin(rad)*r;
rad+=50; //角度的不断变化,实现弹簧振子在固定的半径上下振动
} //这个值可以根据你需要的频率改变,试试:rad+=5
点击浏览该文件
2. 其实,上面的公式是可以推广的,因为在现实的世界,弹簧振子是需要考虑重力,空气摩擦,等很多其他方面的因素,但是,在FLASH世界中,却是能完全实现真空状态理想物理模型,这里加入了角度的计算,(见图解)


照受力分析,按“位”运算分别求出_x,_y,//不懂的看看大学物理书吧:)
简单的说:分别求出_x, _y,得到的就是倾斜方向的运动结果
把效果1的代码换成下面的试试
onClipEvent(load){
rx=50;
ry=100
rad=0;
jiaodu=1//倾斜方向,见图解
x0=_x;
y0=_y;//y的平衡位置
}
onClipEvent(enterFrame){
_x=x0+Math.sin(rad)*rx*jiao;
_y=y0+Math.sin(rad)*ry;
rad+=50; //角度的不断变化,实现弹簧振子在固定的半径上下振动
} //这个值可以根据你需要的频率改变,试试:rad+=5;
值得注意的是:以下的两种情况

效果:
下载源文件(zip压缩文件, 3K):点击下载
四:阻尼运动
定义:
前面所讲的谐振动是一种理想状况,即谐振子系统做无阻尼(无摩擦和辐射损失)的自由振动,它是等幅振动。而在实际中,阻尼是不可消除的,如果没有能量补充,由于机械能有损耗,起振幅将不断地衰减,这种振幅随时间不断衰减的振动叫阻尼振动
效果:
下载源文件(zip压缩文件, 3K):点击下载
代码如下:
onClipEvent(load){
r=100;
rad=0;
y0=_y;//y的平衡位置
zuli=1;
}
onClipEvent(enterFrame){
_y=y0+Math.sin(rad)*r*zuli;
zuli*=0.98;//不断减小,并且接近与0,(zuli>0)
rad+=50; //角度的不断变化,实现弹簧振子在固定的半径上下振动
} //这个值可以根据你需要的频率改变,试试:rad+=5;
//变量"zuli"初使值是1,当zuli非常接近0的时候,也就相当与弹簧振子停下来了
加入了角度的:
下载源文件(zip压缩文件, 3K):点击下载
五:抛物运动
抛物运动是物体受外力开始运动后,没有再受到外力的作用,其水平运动和垂直运动是彼此独立的。不考虑空气阻力的影响,水平方向的运动是匀速直线运动,垂直方向的运动是自由落体运动,(如图)

下面我们试着用程序来模拟平抛运动
效果:
下载源文件(zip压缩文件, 3K):点击下载
步骤:
1. 新建文件800*400像素其他的默认;
2. "ctrl"+F8,创建一个影片剪辑,名称“MC”
3. 回到主场景,"ctrl"+L打开库面版,把刚创建的影片剪辑拖入到舞台,
4. 选中这个MC,打开对齐面版,相对于舞台---左对齐----底对齐,绑定代码:
onClipEvent(load){//MC被加载时,只运行一次
x0=_x;
y0=_y;//初使位置
v=0; //球的速度
rad=0;//球的角度,初使值为0
t=0; //运动时间
dragtime=0; //小球开始拖动的时间;
isdrag=0; //判断球是否被拖动的变量;
isout=0;//判断球是否抛出去了
g=-0.098;//地心的引力常量
}
onClipEvent(mouseDown){//当鼠标按下
if(hitTest(_root._xmouse,_root._ymouse,true)){//判断鼠标是否和小球接触
isdrag=1;//如果接触的话,就返回isdrag的值为1,目的只是用来做记号,告诉后面的程序执行相关的事件;
isout=0;
v=0;
rad=0;
this.startDrag();//开始拖动
dragtime=getTimer();//获得拖动的时间
}
}
onClipEvent(mouseUp){//松开鼠标
if(isdrag==1){
isdrag=0;
isout=1;
t=1;
rad=Math.atan2(_y-y0,_x-x0);//弧度为单位计算并返回 y/x 的反正切
v=Math.sqrt((_x-x0)*(_x-x0)+(_y-y0)*(_y-y0))/(getTimer()-dragtime);
//勾股定理,再用公式:v=s/t求出速度;
this.stopDrag();//停止拖动
}
}
onClipEvent(enterFrame){//进入贞,MC的Frame不断运行
if(isout==1){
_x+=v*Math.cos(rad)*t;
_y+=v*Math.sin(rad)*t-(g*t*t)/2;//见图解(平抛运动的公式)
t++;//t=t+1;
if(_x>800 or _y>400 ){//如果超出舞台的范围,就重设置MC的位置
isout=0;
_x=x0;
_y=y0;
}
}
}
补充:由于抛物运动把时间计算在内的,所以不能单*enterFrame时事件改变小球的位置
加入变量“t”,每次触发enterFrame事件时,代表一个单位的时间变化,我这里用的是12.0fps
补充:抛运动中的竖直上抛运动
物体以一定初速度沿竖直方向,向上抛出后,只受重力作用下的运动。
竖直上抛运动可分为两个阶段来,一个是上升过程,这时它的初速度和重力加速度g方向相反,是匀减速直线运动。上升到最高位置的时候,末速度为零,因此这个时候,物体开始作自由落体运动
这里就只补充程序几个思路吧,就不用物理公式来做了,原理是一样的
步骤:
1. 新建文件550*400像素其他的默认;
2. "ctrl"+F8,创建一个影片剪辑,名称“MC”
3. 回到主场景,"ctrl"+L打开库面版,把刚创建的影片剪辑拖入到舞台,
4. 选中这个MC,绑定代码: