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 tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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