Toon posts:

Bouncing betty

Pagina: 1
Acties:

Verwijderd

Topicstarter
http://www2.hku.nl/~patrick/javascript ...
ik ben hier begonnen met het schrijven van een javascript dat verschillende ballen over het scherm moet laten stuiteren, en wanneer deze tegen elkaar botsen ook weer terug moeten stuiteren. Het geheel werkt wel, maar nog niet naar behoren... Het stuiteren tegen elkaar gaat nog moeizaam, any help? please ...

Verwijderd

Tja, botsingen tussen ballen zijn niet zo heel lastig hoor, er vindt een botsing plaats als:
code:
1
Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2) == straal;

Voor de richting van de gevolgen van die botsing, en de snelheid van beide ballen erna moet je even op een wiskundige manier bepalen.

(Ik heb nu even een paar dagen weinig tijd om het uit te werken, maar als je het binnen 3 nog niet heb mag je me effe een ICQ'tje sturen, of dit topic omhoogtrappen.)

Maar ik denk dat er anderen zijn die je wel kunnen helpen.

[EDIT]
die (x1, y1) en (x2, y2) zijn de coordinaten van het middelpunt van 2 ballen ;)

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Er zijn verschillende stappen die je zou kunnen ondernemen om dit te maken in Javascript. Het principe wat je wil bereiken is de basis voor alle games, en zijn te vinden in elk boek over game-programming. Het is vaak te vinden onder het hoofdstuk "Programmatic Movement" of iets als "Motion Algorithms"

Er zijn meerdere manieren om een object te laten bewegen, random, langs een pad, in een circle, echter elk algoritme bestaat minimaal uit de volgende onderdelen:

- Een functie dat de positie van het object verplaatst, word elke keer uitgevoerd
- Een functie die uitrekent waar het object moet verplaatsen

Dit kan in 2 dimensies, X en Y, maar kan natuurlijk ook in drie dimensies gebeuren ( X, Y, Z ). Je hebt dit gedeelte nu uitgevogeld. Wat je nu moet doen, is het toepassen van basis concepten zoals zwaartekracht, versnelling, vertraging, etc. Dit zijn natuurkundige principes, en als je hebt opgelet bij Natuurkunde vroeger, of als je je boeken hebt bewaard, kun je de formules hier rechtstreeks kopieren.

Voorbeeldje:

Snelheid, is een maat die aangeeft wat de afgelegde afstand is van een object in een bepaalde tijd. Met andere woorden, snelheid geeft aan:
- hoe snel een object beweegt
- welke richting een object beweegt

Snelheid is een zogenaamde Vector maat, het heeft een grootte en een richting. Een vector's snelheidgrootte geeft aan hoe snel het object beweegt ( afstand/tijd ) Een vector's snelheidsrichting is simpelweg de richting waar het object naartoegaat, meestal aangegeven als een hoek in aantal graden, gemeten tegen de wijzers van de klok in vanaf de X as.

Met deze gegevens, kun je code schrijven, die de objecten laten versnellen en vertragen op het scherm. Zo is het ook mogelijk om "collision detection", "inertia", "momentum" en nog veel meer te simuleren. Zoek eens met google op een van deze termen, en ook "Physics for games", "Game Programming" etc en je zult alle theorie vinden die je nodig hebt.

HTH :)

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
Bedankt voor het uitleggen van deze natuurkundige principes, maar na 7 jaar VWO (jaar eerste jaar gezakt), weet ik dit echt allemaal wel!!!

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

het bouncen van je ballen gaat verkeerd in de bounce check. Je kijkt of de een waarde over zijn limiet komt, en vermenigvuldigt de x of y snelheid dan met -1, maar de bal is dan dat punt al met een paar pixels voorbij, en bij de volgende bounce-check is die waarde nog steeds over de limiet, waardoor die weer vermenigvuldigt wordt met -1, en zo komt dat wiebelige effect.

[nfi] hier heb je geen 7 jaar vwo voor nodig :P

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Verwijderd

Topicstarter
Dat weet ik, en ik wist al wel wat het probleem was, alleen vraag of iemand een betere manier weet voor het bouncen ...

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Je voert nu een check op botsen uit, en als dat niet botst update je de layer en de positie variabelen, maar zo kan de ene bol dus al wel IN de andere komen voordat er een bots check is.
Wat je kan doen is de layet posities, en de de positie variabelen wat losser van elkaar houden, dus EERST die positie variabelen updaten, en DAN op botsing checken, en als die waardes nergens mee botsen mag de layer daarheen bewegen, dan voorkom je dus dat layers in elkaar botsen, en wordt de * -1 als het goed is maar 1 keer uitgevoerd.

Verder zou je collision wat sneller kunnen. elke bal checkt nu elke andere bal, maar als de eerste bal alles gechecked heeft hoeft de 2e de eerste niet meer te checken (als je het bots gedrag wat herschrijft), en de 3e hoeft de eerste 2 niet meer te checken, enz.
En de timeout hoef je niet op 1 te zetten. 40 is prima. hij voert het toch niet 1000 keer per seconden uit maar je belast het systeem zo wel enorm. 10 ballen nemen bij mij nu 80% cpu, terwijl dat met een timeout van 40 nog geen 30% is, en niet echt superveel langzamer gaat.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op dinsdag 18 december 2001 11:08 schreef PatrickPietens het volgende:
Bedankt voor het uitleggen van deze natuurkundige principes, maar na 7 jaar VWO (jaar eerste jaar gezakt), weet ik dit echt allemaal wel!!!
oww...dan weet je vast wel het antwoord je eigen vraag:

collision detection:

• waar ben ik
• waar is de andere bal
• is het verschil tussen deze groter dan mijn radius
• zo ja, zet de vector's snelheidsrichting naar de negatieve Y as...

maar ja..iemand met 7 jaar VWO kon dat antwoord zelf wel verzinnen :P

"You're only as good, as what you did last week."


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

btw...nog iets..iemand met 7 jaar VWO snapt vast wel dat het niet gepast is 3 keer dezelfde vraag te stellen in een forum...zulke mensen lezen eerst de /13 FAQ

:P ;)

"You're only as good, as what you did last week."

Pagina: 1