22. december 2005 - 21:39
Der er
11 kommentarer og 1 løsning
Meget simpel kollisions detektion
Hej! Jeg er lige gået kold. Er der ikke en der lige hurtigt kan udfylde den sidste plads i min funktion? bool tankKoll(int x, int y) { double lb1, rb1, lt1, rt1; // Objekt 1: Venstre bund, Højre bund, Venstre top, Højre top double lb2, rb2, lt2, rt2; // Objekt 2: Venstre bund, Højre bund, Venstre top, Højre top // Objekt 1 lb1 = tank.getX(); rb1 = tank.getX()+50; lt1 = tank.getY(); rt1 = tank.getY()+50; // Objekt 2 lb2 = x; rb2 = x+50; lt2 = y; rt2 = y+50; // Hvis objekt 1 rammer objekt 2 skal funktionen returnerer true return false; } Sig lige til hvis i ikke forstår min kode :) Med venlig hilsen, og god jul! Mathias Hansen
Annonceindlæg fra Sprint365
22. december 2005 - 21:45
#1
return lb1 >= lb2 && rb1 <= lb2 && lt1 => lt2 && rt1 <= rt2;
22. december 2005 - 21:49
#2
Kan man ikke syntax error : '>' :)
22. december 2005 - 21:57
#3
bool tankKoll(int x, int y) { int lb1, rb1, lt1, rt1; int lb2, rb2, lt2, rt2; lb1 = tank.getX(); rb1 = tank.getX()+50; lt1 = tank.getY(); rt1 = tank.getY()+50; lb2 = x; rb2 = x+50; lt2 = y; rt2 = y+50; if (lb1 >= lb2 && rb1 <= lb2 && lt1 >= lt2 && rt1 <= rt2) { return true; } else { return false; } } Returnerer hele tiden false. Er det mine beregninger der er forkerte?
22. december 2005 - 22:05
#4
Her er lige et udprint fra et kald af funktionen hvor objekt1 er over objekt2: Objekt1: X: 500 Y: 500 Objekt2: X: 434 Y: 281 Begge objekter er 50 px x 50 px
22. december 2005 - 22:14
#5
Hmm.. Jeg tror jeg har fundet fejlen, det er meget mystisk at Objekt1's x punkt altid er enten 500 eller 450. Jeg kigger lige på det.
22. december 2005 - 22:25
#6
Okay nu virker det fint. :) Objekt1: X: 470 Y: 279 Objekt2: X: 500 Y: 500 Begge objekter er stadig 50 px x 50 px. Hvorfor virker det ikke? Har du en idé om hvor fejlen kan ligge?
22. december 2005 - 22:37
#7
Jeg tror ikke at det er så simpelt. Man skal nok ud i noget i stil med følgende: if(left1 < left2) { if(right1 > left2) { if(top1 < top2) { if(bottom1 > top2) return true; } else { if(buttom2 > top1) return true; } } } else { if(right2 > left1) { if(top1 < top2) { if(bottom1 > top2) return true; } else { if(buttom2 > top1) return true; } } } Jeg har kaldt siderne left, right, top, buttom fordi jeg synes at det er mere logisk (det hedder de når man laver windows programmer)
22. december 2005 - 22:54
#8
Nu returnerer den kun true. Objekt1: X: 268 Y: 104 Objekt2: X: 600 Y: 700 int left1 = tank.getX(); int left2 = x; int top1 = tank.getY(); int top2 = y; int right1 = tank.getX()+50; int right2 = x+50; int bottom1 = tank.getY()+50; int bottom2 = y+50;
22. december 2005 - 23:12
#9
Denne skriver False: #include <iostream> bool Collition(int x1, int y1, int x2, int y2) { int left1 = x1; int right1 = x1 + 50; int left2 = x2; int right2 = x2 + 50; int top1 = y1; int bottom1 = y1 + 50; int top2 = y2; int bottom2 = y2 + 50; if(left1 < left2) { if(right1 > left2) { if(top1 < top2) { if(bottom1 > top2) { std::cout << "true 1" << std::endl; return true; } } else { if(bottom2 > top1) { std::cout << "true 2" << std::endl; return true; } } } } else { if(right2 > left1) { if(top1 < top2) { if(bottom1 > top2) { std::cout << "true 3" << std::endl; return true; } } else { if(bottom2 > top1) { std::cout << "true 4" << std::endl; return true; } } } } std::cout << "False" << std::endl; return false; } int main() { Collition(268, 104, 600, 700); }
26. december 2005 - 20:47
#10
Det bliver simpelthen ved med at drille, kan muligvis være et andet sted fejlen ligger, har lagt projektet midlertidigt på hylden. Lægger du et svar?
27. december 2005 - 00:09
#11
Jeg samler ikke på point.
27. december 2005 - 10:10
#12
Nårja, det er bare i orden så.
Kurser inden for grundlæggende programmering