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

[Allegro 4] Kolizja

Ostatnio zmodyfikowano 2012-08-24 14:45
Autor Wiadomość
matiasz
Temat założony przez niniejszego użytkownika
[Allegro 4] Kolizja
» 2012-08-21 20:43:59
Witam otóż mam problem z dobraniem kolizji.
Sytuacja wygląda następująco:
Strzelam pociskiem (pocisk tablica jednowymiarowa) pocisk trafia w potwora  i tu jest problem.
Chce zrobić tak żeby za zabicie ludzika gracz dostał X punktów. Przy kolizji jednorazowo dodał do zmiennej X punktów ,a potem żeby pocisk został zniszczony i wróg także(to też mi nie wychodzi z usuwaniem bitmapy po kolizji).

for(i = 0; i < MAX_BULLETS; i++)
            {
// ta działa ale nalicza za dużo punktów (jak pocisk się przemieszcza to nabija punkty)
             if( isCollision( bullets[ i ].x, bullets[ i ].y, bullets[ i ].w, bullets[ i ].h,obrazek_x, obrazek_y,                  obrazek->w, obrazek->h )
                 == true )
                {
                    punkty ++;
                }
//ta nie działa w ogóle
                if (kolizja(bullets[i].x,bullets[i].y,bullets[i].w,bullets[i].h,obrazek_x,obrazek_y,obrazek->w, obrazek->h))
                {
                    punkty ++;
                }
            }
Nie mam żadnych pomysłów już kombinuje na wszelkie sposoby i nic.
Z góry dzięki.
P-63234
Miras
» 2012-08-21 20:46:55
dodaj dodatkowy warunek dla petli w przypadku kolizji zmien jego wartosc tak by przerwal petle
P-63237
waxx
» 2012-08-21 20:47:26
nawet nie pokazales definicji funkcji z ktorych korzystasz -- ergo mam wrazenie ze nie masz pojecia co robisz ;d
P-63238
matiasz
Temat założony przez niniejszego użytkownika
» 2012-08-21 22:32:10

bool kolizja(int x1,int y1,int s1,int w1,int x2,int y2,int s2,int w2)
{
     if( x2<=x1+s1 && x2>x1 && y2>=y1 && y2<=y1+w1) return true; else
     if( x2<=x1+s1 && x2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true; else
     if( x2+s2<=x1+s1 && x2+s2>x1 && y2>=y1 && y2<=y1+w1) return true; else
     if( x2+s2<=x1+s1 && x2+s2>x1 && y2+w2>=y1 && y2+w2<=y1+w1) return true;
     else return false;
};
bool isCollision( float x1, float y1, float s1, float w1, float x2, float y2, float s2, float w2 )
{
    if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true );

    return( false );
};

Tak wyglądają definicje funkcji oby dwóch kolizji.

Miras nie rozumiem za bardzo Twojej wypowiedzi.
Tak myślę jakbym zmienił pętle for na While to czy by coś to dało.
P-63248
waxx
» 2012-08-21 22:39:47
return( true );

the fuck is that?
a co do tamtej jego wypowiedzi to chodzi o to zebys po kolizji usuwal pocisk [po prostu usun go z vectora, bo tak to bedzie ci ciagle pointsy liczyc]
P-63252
bingo009
» 2012-08-22 14:01:25
return( true ) i return ( false )? Po co to? Nie lepiej bez nawiasów? A co do kasowania pocisku, i punktów, to nie widzę problemu. Masz tu pseudokod:
C/C++
if( jestkolizja( pociskx, pocisky, celx, cely ) == true ) punkty += 50;


Tu masz linijke kodu na punkty. Wcześniej sobie tworzysz zmienna punkty i już. Możesz też zrobić tak, że podczas sprawdzania kolizji pocisków powiększasz punkty. Są to jedynie podstawy. Potem ją tylko wyświetlasz. A co do znikania pocisku, to jest prosta sprawa, Najzwyczajniej w życiu przestań go rysować. Zwykła tablica jednowymiarowa jest złym pomysłem, bo nie masz żadnej kontroli nad wielkością. Poczytaj o std::vector. Z jego pomocą napisanie kodu pocisków to pikuś. W kontenerze trzymasz sobie pozycje x i y pocisku, kiedy gracz naciśnie strzał, to wtedy dodawany jest nowy indeks do vectora z jego pozycją, potem tylko pętla która rysuje wszystkie pociski, które są w vector(przy okazji w tej pętli sprawdzasz też kolizję, jeżeli jakiś pocisk styka sie z celem, to kasujesz indeks z jego pozycją w vector) i na końcu po narysowaniu wszystkiego dajesz pętle która zwiększa/zmniejsza pozycję pocisków w vector(dzięki temu się ruszają) i po robocie.
P-63287
mati1qazxsw2
» 2012-08-22 15:01:37
C/C++
LX < _RX
RX > _LX
LY < _RY
RY > _LY
L - lewy gorny rog
R - prawy dolny rog
_ - drugi rect
Masz kolizje ;p
P-63296
matiasz
Temat założony przez niniejszego użytkownika
» 2012-08-22 17:43:28
Te kolizje które podałem znalazłem na jakiejś stronie i próbowałem je zastosować. Miałem też dość długą przerwę i trochę skleroza dała się w znaki. Dzięki za wskazówki jak coś mi nie będzie szło to dam znać.
P-63313
« 1 » 2
  Strona 1 z 2 Następna strona