Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro] I znów te kolizje ;p

Ostatnio zmodyfikowano 2009-04-29 23:33
Autor Wiadomość
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
C/C++
bool kolizja()
{ //pozycja przed autkiem map_x+40, map_y+37
    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
C/C++
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 //i tak dalej
//na coś w stylu
if( map[( int ) map_x + 39 ][( int ) map_y + 38 ] ==( 0 || 3 || 7 //itd.
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ść ;)
P-6215
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.
P-6220
« 1 »
  Strona 1 z 1