Zwaartekracht zal het realiteitsgehalte van je game sterk verhogen. Hieronder vind je de correcte berekening.
In veel gevallen voldoet een simpel truukje.
De formule
We gebruiken de volgende formule om de aantrekkingskracht tussen twee objecten te berekenen:
F = G * (massa1 * massa2) / afstand²
G is hier de gravitale constante. Onze games zullen er niet onder lijden indien we deze constante gelijk stellen met 1, of een andere waarde om de presentatie te verbeteren.
Een voorbeeld
// teken 3 planeten op de stage en plaats ze in een MovieClip
aarde_mc.massa = 60;
maan_mc.massa = 10;
mars_mc.massa = 20;
var planeten:Array = new Array(aarde_mc, maan_mc, mars_mc);
// de graviteitsconstante (fictief)
var G:Number = 200;
//
function animate() {
var len:Number = planeten.length;
for (var i:Number = 0; i < len ; i++) {
for (var j:Number = 0; j < len; j++) {
if (i == j) {
continue; // planeten niet t.o.v. zichzelf berekenen
}
var distance:Number = Math.sqrt(Math.pow(planeten[i]._x – planeten[j]._x, 2) + Math.pow(planeten[i]._y – planeten[j]._y, 2));
var F:Number = G * planeten[i].massa * planeten[j].massa / Math.pow(distance, 2);
// F = ma
var a1:Number = F / planeten[i].massa;
var a2:Number = F / planeten[j].massa;
//
var angle:Number = Math.atan2(planeten[i]._y – planeten[j]._y, planeten[i]._x – planeten[j]._x);
// de krachten zijn tegengesteld, vandaar + en -
planeten[i]._x -= a1 * Math.cos(angle);
planeten[i]._y -= a1 * Math.cos(angle);
planeten[j]._x += a2 * Math.cos(angle);
planeten[j]._y += a2 * Math.sin(angle);
}
}
}
onEnterFrame = animate;