• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
–2 głosów
447 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,340 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ź 213 wizyt
0 głosów
1 odpowiedź 365 wizyt
pytanie zadane 30 stycznia 2017 w C i C++ przez jakobosik Początkujący (340 p.)
–2 głosów
1 odpowiedź 555 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez Kuba Kuźnar Nowicjusz (190 p.)

93,187 zapytań

142,203 odpowiedzi

322,017 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2006p. - Michal Drewniak
  10. 1946p. - Adrian Wieprzkowicz
  11. 1901p. - Mikbac
  12. 1744p. - rafalszastok
  13. 1734p. - Anonim 3619784
  14. 1586p. - Dawid128
  15. 1487p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...