#include "Physics.as"
function collsion(mc1, mc2) {
var v1temp = mc1.v;
var v2temp = mc2.v;
mc1.v = ((mc1.m-mc2.m)/(mc1.m+mc2.m))*v1temp+(2*mc2.m/(mc1.m+mc2.m))*v2temp;
mc2.v = (2*mc1.m/(mc1.m+mc2.m))*v1temp-((mc1.m-mc2.m)/(mc1.m+mc2.m))*v2temp;
}
function ballcollsiondetect(mc1, mc2) {
if (mc1.getBounds(_root).yMax>=mc2.getBounds(_root).yMin) {//根据这里的实际情况,简化碰撞的检测
mc1._y = mc2._y-mc2.r-mc1.r; // 这个调整是必须的,否则会因为微小的量变而导致质变。
collsion(mc1, mc2);
}
}
function bordercollsiondetect(mc) {// 垂直碰边的判断。
if (mc.getBounds(_root).yMax>=600) {
mc._y = 600; // Important!否则会因为微小的积累而导致质变---穿出地面。
mc.v *= -0.9; // 还是有点衰减为好。
}
}
_root.onLoad = function() {
g = 2;
balla.a(g);
ballb.a(g);
balla.v(0);
ballb.v(0);
balla.m(2);
ballb.m(4);
balla.r(20);
ballb.r(40);
};
_root.onEnterFrame = function() {
ballcollsiondetect(balla, ballb);
bordercollsiondetect(ballb);
balla.v += balla.a;
ballb.v += ballb.a;
balla._y += balla.v;
ballb._y += ballb.v;
trace(ballb.v);
};