Javascript kolliderande bollar

Permalänk
Medlem

Javascript kolliderande bollar

Hej!

Jag håller på med en uppgift i Javascript som går ut på att jag skall ha en Canvas (på en HTML sida). I den kanvasen skall det från början finnas 2 stycken bollar. Dessa bollar skall röra på sig 2-dimensionellt och när de kolliderar skall en ny boll skapas. Jag kommer alltså i koden inte veta hur många bollar som finns i Canvasen. Problemet jag har är med funktionen som kollar efter kollisioner mellan bollar, den verkar ge utslag även utan att bollar kolliderar.

Länk till filerna.

Här är funktionen som skall detektera kollisioner:

Tanken med de dubbla while-looparna är att de skall gå igenom alla bollar, som tidigare nämnt vet jag ju inte hur många bollar som kommer finnas. if-satsen är tänkt så att samma boll inte skall jämföras med sig själv.

var cntr1 = 0; var cntr2 = 1; function CheckBallCollisions() { while (cntr1 < circles ) { while ( cntr2 < circles ) { if (cntr1 != cntr2) { var xDist = ( x[cntr2] ) - ( x[cntr1] ); var yDist = ( y[cntr2] ) - ( y[cntr1] ); if ( xDist < 0) { xDist = -xDist; } if ( yDist < 0) { xDist = -xDist; } var totDist = Math.sqrt( (xDist*xDist) + (yDist*yDist) ); var totRadius = radius[cntr2] + radius[cntr1]; if ( totDist < totRadius ) { BallCollide(cntr1, cntr2); } } cntr2++; } cntr1++; cntr2 = 1; } cntr1 = 0; }

Tack på förhand!

Edit: Efter att ha kikat lite mer verkar det som att det är kollisionsfunktionen det är fel på. Har även ändrat kollisionsfunktionen så att avstånden kan vara negativa.

Kollisionsfunktionen:

function BallCollide(ball1, ball2) { //Changes velocities and directions of the balls colided newVelX1 = ( xAdd[ball1] * ( mass[ball1] - mass[ball2] ) + ( 2 * mass[ball2] * xAdd[ball2] ) / (mass[ball1] + mass[ball2]) ); newVelY1 = ( yAdd[ball1] * ( mass[ball1] - mass[ball2] ) + ( 2 * mass[ball2] * yAdd[ball2] ) / (mass[ball1] + mass[ball2]) ); newVelX2 = ( xAdd[ball2] * ( mass[ball2] - mass[ball1] ) + ( 2 * mass[ball1] * xAdd[ball1] ) / (mass[ball2] + mass[ball1]) ); newVelY2 = ( yAdd[ball2] * ( mass[ball2] - mass[ball1] ) + ( 2 * mass[ball1] * yAdd[ball1] ) / (mass[ball2] + mass[ball1]) ); //Stores new velocities in arrays for velocities xAdd[ball1] = newVelX1; yAdd[ball1] = newVelY1; xAdd[ball2] = newVelX2; yAdd[ball2] = newVelY2; }

Mvh
Hugo

Visa signatur

Fractal Design Define R5 | Custom vattenkylning | Intel Core I5 3570K @ 4.4GHz | ASUS Sabertooth Z77 | Sapphire R9 Fury | 24 GB 1600MHz | Corsair RM 750x | Samsung 830 128 GB | Crucial BX100 500GB |

| Egenbyggd DAC: MINI4396, moddad | --> | Fostex TH-X00 |