时间:2010-08-13 | 栏目:图像综合 | 点击:次
郑重声明:本教程源于keith peters的新书making things move的新书介绍,经本人实验整理并对大部分内容进行了扩展讲解,发表在webstudio上。如需转载。请联系本站。
Actionscript animation简明教程
本教程节选自的未正式出版的新书making things move的新书介绍。主要内容是关于速度,加速度,弹性,缓动,摩擦力,重力等内容,这里没有非常详尽的内容,如果你想知道更详尽的内容,可以预定购买作者的新书making things move…相信一定是一本好书。引用keith peters的话就是你一定不要直接将代码粘过来用,只有理解了它的应用,才能运用自如。在本教程中本人对大部分内容进行了扩展讲解。希望对于初学或中级用户有所帮助,由于多年没有研究过数学物理,难免有误,希望多多指正。
1.速度
物体的运动都是沿着一定的方向,以恒定或是加速度的方式的运动的。在FALSH中要使物体以一个恒定的速度运动,就需要我们在每一帧不断的累加恒定的速度。这里面我们使用一种帧的循环的方式,来使物体不断的累加恒定的速度,以达到目的地。对于帧的循环方式大致上有三种,一种是使用代码onEnterFrame,一种是使用setInterval,另一种就是使用二到三帧来达到循环,如果你对这三种方式不太熟,请查看帮助来学习。
在x轴方向的速度我们定义为vx,方向是向右,如果向左只要设为负值就可以。
例如:
代码:
代码: |
vx=5; onEnterFrame=function(){ my_mc._x+=vx;//你也可以写成my_mc._x=my_mc._x+vx; } |
代码: |
vy=5; onEnterFrame=function(){ my_mc._y+=vy;//你也可以写成my_mc._y=my_mc._y+vy; } |
代码: |
vx=5; vy=5; onEnterFrame=function(){ my_mc._x+=vx; my_mc._y+=vy; } |
代码: |
speed=10; angle=15; radians=angle*Math.PI/180; onEnterFrame=function(){ vx=Math.cos(radians)*speed; vy=Math.sin(radians)*speed; my_mc._x+=vx; my_mc._y+=vy; } |
代码: |
ax=0.2; vx=0; onEnterframe=function(){ vx+=ax; my_mc._x+=vx; } |
代码: |
ax=0.2; ay=0.1; vx=0; vy=0; onEnterFrame=function(){ vx+=ax; vy+=ay; my_mc._x+=vx; my_mc._y+=vy; } |
代码: |
grav=0.5 vy=0; onEnterFrame=function(){ vy+=garv; my_mc._y+=vy; } |
代码: |
//设定边界 top=0; left=0; right=400; bottom=300; vx=10; vy=10; onEnterFram=function(){ my_mc._x+=vx; my_mc._y+=vy; //下面代码检测小球是否到达边界,如果已到边界,重设小球的正确做坐,并使其回弹, if(my_mc._x+my_mc._width/2>right){ my_mc._x=right-my_mc._width/2; vx*=-1; } if(my_mc._x-my_mc._width/2<left){ my_mc._x=left+mc_mc._width/2; vx*=-1; } if(my_mc._y-my_mc._height/2<top){ my_mc._y=top+my_mc._height/2; vy*=-1; } if(my_mc._y+my_mc._height/2>bottom){ my_mc._y=bottom-my_mc._height/2; vy*=-1; } } |
代码: |
top=0; left=0; right=400; bottom=300; //设定重力加速度变量garv garv=.5; vx = 10; vy = 10; onEnterFrame = function () { //y轴方向的加速度 vy+=garv; my_mc._x += vx; my_mc._y += vy; if(my_mc._x+my_mc._width/2>right){ my_mc._x=right-my_mc._width/2; vx*=-0.8; } if(my_mc._x-my_mc._width/2<left){ my_mc._x=left+my_mc._width/2; vx*=-0.8; } if(my_mc._y-my_mc._height/2<top){ my_mc._y=top+my_mc._height/2; vy*=-0.8; } if(my_mc._y+my_mc._height/2>bottom){ my_mc._y=bottom-my_mc._height/2; vy*=-0.8; } }; |
代码: |
fraction=0.95; vx=10; vy=10; onEnterFrame=function(){ vx*=fraction; vy*=fraction; my_mc._x+=vx; my_mc._y+=vy; } |
代码: |
top=0; left=0; right=400; bottom=300; garv=.5; vx = 10; vy = 10; onEnterFrame = function () { //设定如果没有拖动则小球正常进行带有能量损失的弹性运动 if(!dragging){ vy+=garv; my_mc._x += vx; my_mc._y += vy; if(my_mc._x+my_mc._width/2>right){ my_mc._x=right-my_mc._width/2; vx*=-0.8; } if(my_mc._x-my_mc._width/2<left){ my_mc._x=left+my_mc._width/2; vx*=-0.8; } if(my_mc._y-my_mc._height/2<top){ my_mc._y=top+my_mc._height/2; vy*=-0.8; } if(my_mc._y+my_mc._height/2>bottom){ my_mc._y=bottom-my_mc._height/2; vy*=-0.8; } //如果有拖动,则此时速度发生了变化,需要记录下最后my_mc的位置和当前my_mc的位置,两者的差为当前的速度。 }else{ vx=my_mc._x-oldx; vy=my_mc._y-oldy; oldx=my_mc._x; oldy=my_mc._y; } }; my_mc.onPress=function(){ this.startDrag(); dragging=true; } my_mc.onRelease=function(){ this.stopDrag(); dragging=false; } |
代码: |
targetx = 200; targety = 150; onEnterFrame = function () { dx=targetx-my_mc._x; dy=targety-my_mc._y; my_mc._x+=dx*.3; my_mc._y+=dy*.3; }; |
代码: |
var targetx = 200; var targety = 150; fraction = .9; vx = 0; vy = 0; onEnterFrame = function () { if (!dragging) { //起始点与目标地点的距离 dx = targetx-my_mc._x; dy = targety-my_mc._y; //加速度 vx += dx*.3; vy += dy*.3; //加入摩擦 vx *= fraction; vy *= fraction; my_mc._x += vx; my_mc._y += vy; } }; my_mc.onPress = function() { this.startDrag(); dragging = true; }; my_mc.onRelease=function() { this.stopDrag(); dragging = false; }; |
代码: |
var targetx = 200; var targety = 150; fraction = .9; vx = 0; vy = 0; onEnterFrame = function () { dx = _xmouse-my_mc._x; dy = _ymouse-my_mc._y; vx += dx*.3; vy += dy*.3; vx *= fraction; vy *= fraction; my_mc._x += vx; my_mc._y += vy; //画线与mouse相连 clear(); lineStyle(1,0,100); moveTo(_xmouse,_ymouse); lineTo(my_mc._x,my_mc._y); }; |
代码: |
fraction = .7; grav=20; my_mc.vx = 0; my_mc.vy = 0; my_mc1.vx = 0; my_mc1.vy = 0; my_mc2.vx = 0; my_mc2.vy = 0; onEnterFrame = function () { clear(); lineStyle(1, 0, 100); moveTo(_xmouse, _ymouse); spring(my_mc, _xmouse, _ymouse); spring(my_mc1, my_mc._x, my_mc._y); spring(my_mc2, my_mc1._x, my_mc1._y); }; function spring(mc, x, y) { dx = x-mc._x; dy = y-mc._y; mc.vx += dx*.3; mc.vy += dy*.3; mc.vy += grav; mc.vx *= fraction; mc.vy *= fraction; mc._x += mc.vx; mc._y += mc.vy; lineTo(mc._x, mc._y); } |