• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Arkanoid - piłka nie reaguje na obecność bloków

Mały hosting, OGROMNE możliwości
–2 głosów
611 wizyt
pytanie zadane 26 czerwca 2021 w C i C++ przez Frog17 Nowicjusz (190 p.)

Hej,

tworzę Arkanoida w C++ Builderze i mam problem z odbijaniem się piłki od bloków. Piłka zdaje się raz przelatywać przez bloki bez odbicia, a raz odbija się w nie ten kierunek co trzeba. Kombinowałem już na wiele sposobów, ale żaden nie działał poprawnie. Poniżej wklejam kod, który ma za zadanie wychwycić sytuację, gdy piłka natrafi na blok z każdej z czerech stron oraz zareagować. Proszę o pomoc i ewentualne sugestie. Z góry dziękuję.

    if ((ball->Left+ball->Width>=Square->Left) &&
       (ball->Left<=Square->Left+Square->Width)&&
       (ball->Top<=Square->Top+Square->Height) &&
       (ball->Top>=Square->Top+Square->Height-3) &&
       (x>0)&&(Square->Visible==true))
       {
           x=-x;
           Square->Visible=false;
       }
    else if((ball->Top+ball->Height>=Square->Top)  &&
            (ball->Top<=Square->Top+Square->Height) &&
            (ball->Left<=Square->Left+Square->Width)&&
            (ball->Left>=Square->Left+Square->Width+3)&&
            (y<0)&&(Square->Visible==true))
            {
                y=-y;
                Square->Visible=false;
            }
    else if((ball->Top+ball->Height>=Square->Top)   &&
            (ball->Top<=Square->Top+Square->Height) &&
            (ball->Left+ball->Width>=Square->Left)   &&
            (ball->Left+ball->Width<=Square->Left-3)   &&
            (y>0)&&(Square->Visible==true))
            {
                x=-x;
                Square->Visible=false;
            }
    else if ((ball->Left+ball->Width>=Square->Left)    &&
            (ball->Left<=Square->Left+Square->Width) &&
            (ball->Top+ball->Width>=Square->Top)    &&
            (ball->Top+ball->Width<=Square->Top+3)    &&
            (x<0)&&(Square->Visible==true))
            {
                y=-y;
                Square->Visible=false;
            }

ball - piłka

Square - blok

komentarz 26 czerwca 2021 przez Oscar Nałogowiec (29,360 p.)

Czy jesteś pewny, że piłka nie może przelecieć więcej niż 3 pól pomiędzy sprawdzeniami?

Bo inaczej to "przetuneluje" przez taki warunek:

        (ball->Top+ball->Width>=Square->Top)    &&
        (ball->Top+ball->Width<=Square->Top+3)    &&

 

komentarz 26 czerwca 2021 przez Frog17 Nowicjusz (190 p.)
Pomiędzy sprawdzeniami piłka przelatuje 3, więc myślę, że to jest wystarczające

1 odpowiedź

–1 głos
odpowiedź 26 czerwca 2021 przez Palpebral Nowicjusz (180 p.)
Spróbuj zmienić tę linię z True na False - (Square->Visible==true))

Podobne pytania

0 głosów
1 odpowiedź 318 wizyt
0 głosów
1 odpowiedź 437 wizyt
pytanie zadane 30 stycznia 2017 w C i C++ przez jakobosik Początkujący (340 p.)
–2 głosów
1 odpowiedź 640 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez Kuba Kuźnar Nowicjusz (190 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,262 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...