[Allegro] I znów te kolizje ;p
Ostatnio zmodyfikowano 2009-04-29 23:33
Patzick Temat założony przez niniejszego użytkownika |
[Allegro] I znów te kolizje ;p » 2009-04-29 21:40:17 Kolizje to moja słabość ;/ Robię sobie kolizje dla obracającego się samochodziku (samochodzik się tylko obraza wokół siebie a mapa przesuwa się w stronę w jaką jest zwrócony) i mam coś takiego bool kolizja() { if(( int ) samochod.kierunek == 54 ) { if( map[( int ) map_x + 40 ][( int ) map_y + 37 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek > 54 &&( int ) samochod.kierunek < 72 ) { if( map[( int ) map_x + 41 ][( int ) map_y + 38 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek == 0 ) { if( map[( int ) map_x + 43 ][( int ) map_y + 40 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek > 0 &&( int ) samochod.kierunek < 18 ) { if( map[( int ) map_x + 42 ][( int ) map_y + 42 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek == 18 ) { if( map[( int ) map_x + 40 ][( int ) map_y + 43 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek > 18 &&( int ) samochod.kierunek < 36 ) { if( map[( int ) map_x + 39 ][( int ) map_y + 42 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek == 36 ) { if( map[( int ) map_x + 37 ][( int ) map_y + 40 ] != 0 ) return true; else return false; } if(( int ) samochod.kierunek > 36 &&( int ) samochod.kierunek < 54 ) { if( map[( int ) map_x + 39 ][( int ) map_y + 38 ] != 0 ) return true; else return false; } } Kod jeszcze bardziej muszę wydłużyć bo na razie na 45 stopni obrotu sprawdza tylko 1 kafla, ale kolizję sprawdza mi tylko w perspektywie 1 kafla, jak zrobić, żeby przy mapie z wielką ilością kafli gdzie np 400 jest takich które mają wywołać kolizję, można było sprawdzić w krótkim kodzie? Czyli jak skrócić warunki if( map[( int ) map_x + 39 ][( int ) map_y + 38 ] == 0 && map[( int ) map_x + 39 ][( int ) map_y + 38 ] == 3 && map[( int ) map_x + 39 ][( int ) map_y + 38 ] == 7
if( map[( int ) map_x + 39 ][( int ) map_y + 38 ] ==( 0 || 3 || 7
Tyle, żeby działało :P Jak ten problem byście Wy rozwiązali? Choć pewnie już go mieliście jak robiliście większe mapy :) Chyba, że ja w ogóle źle to robię bo jak na początku oświadczyłem- kolizje to moja słabość ;) |
|
DejaVu |
» 2009-04-29 23:33:33 Gdzieś na forum jest temat w którym opisana jest metoda wykrywania kolizji, gdy obiekt zbudowany jest z odcinków. Polecam go odszukać i z niego skorzystać. Możesz dzięki temu tworzyć dowolny wielokąt i jedyne co obracasz to punkty, które łatwo obrócić :) Stosując wykrywanie kolizji metodą prostokąta niestety sprawa się znacząco komplikuje. |
|
« 1 » |