• 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 PRO i VPS, Openstack, VMWare, MS Hyper-V
–2 głosów
128 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 (27,430 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ź 163 wizyt
0 głosów
1 odpowiedź 305 wizyt
pytanie zadane 30 stycznia 2017 w C i C++ przez jakobosik Początkujący (340 p.)
–2 głosów
1 odpowiedź 468 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez Kuba Kuźnar Nowicjusz (190 p.)

89,727 zapytań

138,332 odpowiedzi

309,340 komentarzy

59,649 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 429p. - Argeento
  2. 427p. - nidomika
  3. 396p. - Mikbac
  4. 392p. - ssynowiec
  5. 390p. - Łukasz Eckert
  6. 387p. - TheLukaszNs
  7. 386p. - rucin93
  8. 382p. - Michal Drewniak
  9. 382p. - Marcin Harasimowicz
  10. 378p. - JMazurkiewicz
  11. 373p. - tokox
  12. 367p. - Jarosław Roszyk
  13. 362p. - adrian17
  14. 359p. - overcq
  15. 350p. - Mawrok
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! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...