Zit al een week met een probleem, waar ik maar niet uitkom. Op internet zijn er talloze antwoorden te vinden, maar geen die eigenlijk geschikt zijn voor mijn situatie.
Het is als volgt, ben op dit moment bezig met een simpele html spel, waarbij ik hierbij dom manipulatie gebruik. De speler kan een vervoersmiddel met de pijltjestoetsen over het scherm bewegen. In het speelveld wil ik objecten hebben waar de speler tegen aan zou kunnen botsen.
Op zich geen probleem denk je. Collisions detecteren met vierkanten of rondje objecten is redelijk makkelijk te realiseren. Omdat je het voertuig kan roteren, maakt het gelijk een stuk lastiger.

Om hierbij collisions te kunnen berekenen tussen twee objecten (beide een div, met een achtergrondplaatje), zou ik eerst van object 2 de linkerbovenpunt en linkeronderpunt moeten berekenen ( als voorbeeld) en moeten vergelijken met het ander object om te kijken of de rechter boven- of onderpunt zich tussen die 2 waardes bevind. Dat lijkt mij de makkelijkste manier.
Het bewegent object verplaats ik met de volgende code als er op een knop wordt gedrukt:
Nu wil ik deze uitbreiden door alle 4 de coordinaten van het object (als css top & left) te hebben zodat ik hier weer verder in javascript kan rekenen. Hier loop ik eigenlijk een beetje vast. Dus kort gezegd, hoe bereken ik de 4 punten van een object nadat deze geroteerd is met bv de CSS functie:
Na een week lang onderzoek en van alles en nog wat te hebben geprobeerd, kwam ik op het volgende uit, wat het meest relevant zou kunnen zijn:
- Informatie over collisions in games
http://www.metanetsoftware.com/technique/tutorialA.html
- Soort gelijk probleem
http://gamedev.stackexcha...of-a-rotated-rectangle-2d
De code daaruit heb ik aangepast, maar ik krijg nog steeds de verkeerde waardes eruit:
Ben ik wel op de goede weg?
Het is als volgt, ben op dit moment bezig met een simpele html spel, waarbij ik hierbij dom manipulatie gebruik. De speler kan een vervoersmiddel met de pijltjestoetsen over het scherm bewegen. In het speelveld wil ik objecten hebben waar de speler tegen aan zou kunnen botsen.
Op zich geen probleem denk je. Collisions detecteren met vierkanten of rondje objecten is redelijk makkelijk te realiseren. Omdat je het voertuig kan roteren, maakt het gelijk een stuk lastiger.

Om hierbij collisions te kunnen berekenen tussen twee objecten (beide een div, met een achtergrondplaatje), zou ik eerst van object 2 de linkerbovenpunt en linkeronderpunt moeten berekenen ( als voorbeeld) en moeten vergelijken met het ander object om te kijken of de rechter boven- of onderpunt zich tussen die 2 waardes bevind. Dat lijkt mij de makkelijkste manier.
Het bewegent object verplaats ik met de volgende code als er op een knop wordt gedrukt:
code:
1
2
3
4
5
| var VoertuigY= -Math.cos(rotatie * Math.PI / 180) * acceleratie; var VoertuigX = Math.sin(rotatie * Math.PI / 180) * acceleratie; var NewY = VoertuigY+(parseInt($('.userBlock[id=' + UserID + ']').css('top'))); var NewX = VoertuigX+(parseInt($('.userBlock[id=' + UserID + ']').css('left'))); |
Nu wil ik deze uitbreiden door alle 4 de coordinaten van het object (als css top & left) te hebben zodat ik hier weer verder in javascript kan rekenen. Hier loop ik eigenlijk een beetje vast. Dus kort gezegd, hoe bereken ik de 4 punten van een object nadat deze geroteerd is met bv de CSS functie:
code:
1
| $('.user').css({'-webkit-transform': 'rotate(' + rotatie+ 'deg)'}); |
Na een week lang onderzoek en van alles en nog wat te hebben geprobeerd, kwam ik op het volgende uit, wat het meest relevant zou kunnen zijn:
- Informatie over collisions in games
http://www.metanetsoftware.com/technique/tutorialA.html
- Soort gelijk probleem
http://gamedev.stackexcha...of-a-rotated-rectangle-2d
De code daaruit heb ik aangepast, maar ik krijg nog steeds de verkeerde waardes eruit:
code:
1
2
3
4
5
6
7
8
| var width = 64; var height = 64; x1 = (VoertuigX * Math.cos(rotatie)) - (VoertuigY* Math.sin(rotatie)); y1 = (VoertuigX * Math.sin(rotatie)) + (VoertuigY* Math.cos(rotatie)); x2 = (VoertuigX +width/2 * Math.cos(rotatie)) - (VoertuigY+height/2 * Math.sin(rotatie)); y2 = (VoertuigX +width/2 * Math.sin(rotatie)) + (VoertuigY+height/2 * Math.cos(rotatie)); |
Ben ik wel op de goede weg?