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

Odbijająca się piłka od ścian okna

Ostatnio zmodyfikowano 2010-12-25 17:31
Autor Wiadomość
Marys
Temat założony przez niniejszego użytkownika
Odbijająca się piłka od ścian okna
» 2010-12-20 16:24:19
Witam,
jak zrobić odbijającą się piłkę od ścian okna o rozmiarze, który podajemy?
P-25371
waxx
» 2010-12-20 16:43:47
if(Xpilki > szer_okna || Xpilki < 0) predkosc_pilki.x *= -1;
P-25372
ison
» 2010-12-20 16:44:01
Chcesz gotowiec czy masz problem z jakąś konkretną rzeczą?
kąt odbicia = kąt padania, piłka może lecieć tylko w 4 kierunkach jeśli uwzględniamy tylko linie (od których się odbija) równoległe do osi OX/OY
można to w prosty sposób zaif'ować

//
mamy 2 enumy move_horizontal i move_vertical, mówią one czy piłka porusza się w prawo/lewo, górę/dół
speed to prędkość z jaką porusza się piłka, SCR_W i SCR_H - rozmiar okna
(na przykładzie Allegro):
C/C++
// *Poruszanie piłką*
if( move_vertical == UP ) kulka_y -= speed;

if( move_vertical == DOWN ) kulka_y += speed;

if( move_horizontal == LEFT ) kulka_x -= speed;

if( move_horizontal == RIGHT ) kulka_x += speed;

// *Sprawdzanie czy piłka nie wyleciała poza okno - jeśli tak to odbijamy ją pod tym samym kątem*                                
if( kulka_x > SCR_W - kulka->w ) move_horizontal = LEFT;

if( kulka_x < 0 ) move_horizontal = RIGHT;

if( kulka_y > SCR_H - kulka->h ) move_vertical = UP;

if( kulka_y < 0 ) move_vertical = DOWN;

P-25373
dmx81
» 2010-12-20 17:33:13
a ja od siebie dodam (o ile dobrze pamietam, ale moge sie mylic), kulka_x i kulka_y to wspolrzedne srodka kolka (chyba ze uzywasz BITMAPY), jesli jednak rysujesz okrąg - to zamiast if (kulka_x<0) uzywasz
C/C++
if( kulka_x < 0 + kulka + r ) // itd, dla y to samo, no i dla wartosci wiekszych od rozmiarow wys i szer okna

wiadomo, jesli rysunek(BITMAP) - wtedy patrzysz na wierzcholki obrazka, jesli okrag, sprawdzasz, czy odleglosc srodka okregu jest wieksza niz promien okregu (inaczej kolizja i odbicie)
P-25374
Mazzir
» 2010-12-25 17:20:31
Jeżeli piłka.x jest większe lub równe okno.x to odbij itd.
Tyle, że musisz wyliczyć sobie kont odbicia ;p
Sam kiedyś próbowałem i mi się odechciało xD
P-25496
DejaVu
» 2010-12-25 17:31:02
Jeżeli odbicie robisz od ściany, która jest pod kątem prostym to wystarczy zrobić np.
C/C++
if( obiekt.x + obiekt.promien >= sciana.x )
     obiekt.predkosc_x = - obiekt.predkosc_x;

P-25506
« 1 »
  Strona 1 z 1