|
上次转贴了一些物理的公式,在这里就应用一下作了个小球弹簧的效果,希望让大家有点启发 1|#Z1ink
hwrM5m&xD
[全屏播放] ho:dos?+
+[j-#=Q
nK ruVW[J
步骤1: oQ!KKa8Y?Q
在场景上画个圆,然后选择圆按F8,转换成Movieclip。注册点(Register point)选择中间 %E?jZo M~
~rE&A1;
步骤2: (@\&/|F
;
在圆形movieclip属性面板上加上instance name为ball Rt>cjsOX
/#w]CJ$F
步骤3: 6?t%Tx9|
在场景第一个frame输入以下代码 @zR0@G_!
pl.0/`#0r
6V ,j0(kY+
[color=red]//在2004版本需要先定义变量,当中包括了球的半径,摩擦力,重力,弹簧力,弹簧床的宽度高度等 dERJ~B5-
width = ball._width/2+1; azSk[_
v = 0; 6vo{ J
grav = 2; x
]
^
damp = 0.98; +*_je2iM
k = 0.2; C<,:zCEu
left = 0; lSwp6O
right = 400; +s#;R3m
top = 200; W@sK;I
bottom = 350; ,\CW0Yp
out = false; Z/9IcyQLOG
W6f[qO
[color=red]//当球按下时可拖动范围和out变量为false阻止球体计算球体下坠 _S)Vn C{`
ball.onPress = function() { PDOY_jDcG
out = true; <4Y@7Bm
startDrag(this, true, left+width, 0+width, right-width, bottom-width); akV=/w -|P
}; >RIF ,OV
L2p!$.@~
//当球放开的时候停止拖动动作和开始计算球体下坠的动作 {f:`NVG
ball.onRelease = function() { ;
|^}/H
out = false; k!KQ]_
v = 0; XEW6U
this.stopDrag(); vAey3nYt
}; 8WEqzb
+$i:Lm7Iq
//画出球体压着弹簧床时的图形 OdZ%9ds3(
MovieClip.prototype.drawline = function(x, y) { ]Jd6S$c?Uo
x1 = x-_root.width; wKYOVLzj
x2 = x+_root.width; L|&b5T(DV
with (this._parent) { kk>Q;5YFy
clear(); hRv"Ca-Z#
beginFill(0x123456); (|vPXH0N
lineStyle(1); )qc}6I`e
moveTo(left, top); EP'-<^:m
curveTo(x1, top, x1, y); m)~`@za
lineTo(x2, y); vC8@\>P
curveTo(x2, top, right, top); epN&si@
lineTo(right, 350); 0,{b^ -|cj
lineTo(left, 350); N=F
l2o<t
lineTo(left, top); +iY|"NA
endFill(); w\bIu+,8
} %(kI!hR
updateAfterEvent(); &Er"`Zh`
}; 9P)Af3Q
M-c "7Kf~
//球体离开弹簧床的时候还原床形 iS#CFF5>a
MovieClip.prototype.drawline_0 = function() { 7Noz<pH
with (this._parent) { 2dB?q?%x72
clear(); b;<pZ(7
beginFill(0x123456); >hHgl\t)
lineStyle(1); "Jj- +F<H6
moveTo(left, top); jl[+|GT$zj
lineTo(right, top); aB e?sq
lineTo(right, 350); OE,x
lineTo(left, 350); #RQK1qI
s
lineTo(left, top); f8@p5+[ #
} s6&Otcqq
updateAfterEvent(); aK[-~s%
}; 6L[F F4
{m"KC,N
//定义两个空mc以画出弹簧床 zO#`<N@v
_root.createEmptyMovieClip("line", 0); <iz>:<:(J
_root.createEmptyMovieClip("line1", 1); LIN{\(
s#t)n(>
//当flash开始播放时的事件 q,03gs
_root.onEnterFrame = function() { w8)V,c?,
if (!out) { //当滑鼠没有拖动球体的时候,计算出球体下坠的位置(包括地心吸力) n/v~5g
v += grav; ScD8 Za
v *= damp; !B>a8qpc
ball._y += v; -xrs^8
} @XS=n|+(
if (ball._y>top) { //当球的位置在弹簧床上的时候 DLNO{6D?g
v += (ball._y-top)*-1*k; o\tClx
@
line.drawline(ball._x, ball._y); !"
L~P#J
} else { //当球的位置离开弹簧床的时候 m^c`dvD
line1.drawline_0(); H'7ka&*P!U
} kD0,A
}; 3$;Yj:)DR
[/color][/color]
|
一共有 716 条评论