Forum: kollisions detector

Forum huvudsida -> Programmering -> kollisions detector

Sidor: 1

Till botten

dapus 12:18 - 29:e April 2006 | Post #1
Medlem
Inlägg: 3


Skicka PM
hej

jag har lite problem med min kollisions detecor som jag håller på att skriva. jag har läst lite på gamedev.com (http://www.gamedev.net/reference/articles/article735.asp) men jag får det inte att fungera.
collision-funktionen:
  1. int collision(int object1, int object2)
  2. {
  3. int left1, left2;
  4. int right1, right2;
  5. int top1, top2;
  6. int bottom1, bottom2;
  7. left1 = objects[object1].x;
  8. left2 = objects[object2].x;
  9. right1 = objects[object1].x + objects[object1].w;
  10. right2 = objects[object2].x + objects[object2].w;
  11. top1 = objects[object1].y;
  12. top2 = objects[object2].y;
  13. bottom1 = objects[object1].y + objects[object1].h;
  14. bottom2 = objects[object2].y + objects[object2].h;
  15. if (left2 < right1)
  16. if (top1 < bottom2 || bottom1 > top2) // if object2 is not over or under object1
  17. return 4; // object2 kolliderade med vänster sida
  18. else if (right2 > left1)
  19. if (top1 < bottom2 || bottom1 > top2)
  20. return 2; // object2 kolliderade med höger sida
  21. else if (bottom2 > top1)
  22. if (right1 > left2 || left1 < right2) // if object2 is not to the left or right of object1
  23. return 3; // object2 kolliderade med botten
  24. else if (top2 < bottom1)
  25. if (right1 > left2 || left1 < right2)
  26. return 1; // object2 kolliderade med toppen
  27. return 0;
  28. }


edit:
glömde skriva lite saker:
funktionen retunerar hela tiden hela tiden 4 (att den kolliderar med vänster sida).


Senast redigerad 12:24 - 29:e April 2006


Nissebosselasse 16:01 - 29:e April 2006 | Post #2
Medlem
Inlägg: 490


Skicka PM
Först och främst tycker jag du ska kolla upp indenteringen (inskjutande av rader) på dina if-satser; det ser ut som om du menar en sak men att det blir en annan. Det är oftast en bidragande orsak till fel med else-satser.

-------------------------
http://pushingcows.se
Gula Nallen



dapus 17:12 - 29:e April 2006 | Post #3
Medlem
Inlägg: 3


Skicka PM
jag har alltid trott att man kunde göra så Smiley. men jag har ändrat som du sa och nu retunerar den en massa 2:or och 4:or.
Det som jag har ändrat:
  1. if (left2 < right1)
  2. {
  3. if (top1 < bottom2 || bottom1 > top2) // if object2 is not over or under object1
  4. return 4; // Kolliderar med vänster sida
  5. }
  6. if (right2 > left1)
  7. {
  8. if (top1 < bottom2 || bottom1 > top2)
  9. return 2; // Kolliderar med höger sida
  10. }
  11. if (bottom2 > top1)
  12. {
  13. if (right1 > left2 || left1 < right2) // if object2 is not to the left or right of object1
  14. return 3; // Kolliderar med botten
  15. }
  16. if (top2 < bottom1)
  17. {
  18. if (right1 > left2 || left1 < right2)
  19. return 1; // kolliderar med toppen
  20. }



Senast redigerad 17:19 - 29:e April 2006


Nissebosselasse 19:11 - 29:e April 2006 | Post #4
Medlem
Inlägg: 490


Skicka PM
Okej, bra, jag menade i och för sig inte att else-satser i sig är dumma, utan bara att du hade placerat dom på så vis att när man läser koden så ser det ut som om dom tillhör en viss if-sats, när dom enligt språkets regler egentligen tillhör någon helt annan.

Jag sitter och skummar igenom http://www.gamedev.net/reference/articles/article735.asp. Du har implementerat någon egen variant (där man ska kunna få veta vilken sida som är träffad), eller? Att funktionen returnerar en massa 2:or och 4:or behöver ju inte vara ett fel i sig: objekten stöter kanske i varandra där hela tiden? Smiley

Jag tycker du ska skriva om hela funktionen till något enklare, t.ex. den första varianten på gamedev.net-sidan, bara så att du vet att allting fungerar ordentligt. För om funktionen får fel data från övriga programmet, så kommer den ju ge fel resultat hela tiden.

-------------------------
http://pushingcows.se
Gula Nallen



dapus 21:19 - 29:e April 2006 | Post #5
Medlem
Inlägg: 3


Skicka PM
att den retunerar vilken sida som som träffar är för att jag ska veta hur den ska studsa t.ex.:
om botten träffar så ska man minska y-positionen och om toppen träffar så ska man öka y istället.

den retunerar 2 och 4 fast det inte finns något att studsa mot

den första varianten på gamedev bygger min kod på. Men då kan man inte ha flera objekt som studsar runt.

hela koden:
http://david.dufberg.se:82/test.cpp http://david.dufberg.se:82/main.h


Senast redigerad 21:19 - 29:e April 2006


Sidor: 1

Forum huvudsida -> Programmering -> kollisions detector
Atom feed

Du får inte posta i den här tråden | Till toppen