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

SFML-kolizja z tablicą sprajtów

Object Storage Arubacloud
0 głosów
492 wizyt
pytanie zadane 21 listopada 2018 w C i C++ przez oliwzcak12 Użytkownik (550 p.)

Mam problem z kolizją sprajtów w tablicy 

https://pastebin.com/rSzhTFW1

problem leży w linijce 81 i dalszych ifach odpowiedzialnych za kolizję 

if(postac.getGlobalBounds().intersects(squares[i].getGlobalBounds())) //problem jest z tablicą squares
                {
                   kolizja_gorna=true;
                   std::cout<<"kolizja gorna!!"<<std::endl;
                }
 
                else
                {
                    kolizja_gorna=false;
                    postac.move(0,-5);
                }

chciałbym żeby kolizja dotyczyła wszystkich elementów tablicy a nie wiem jak to uzyskać :( 

Ktoś mógłby mi w tym pomóc bo męczę się nad tym już z drugą godzinę a nie umiem znaleźć odp w wujku google więc to albo coś niemożliwego albo tak prostego co wszyscy wiedzą a ja nie haha także proszę o pomoc lub ewentualne wytknięci nie wiedzy. laugh

1 odpowiedź

0 głosów
odpowiedź 22 listopada 2018 przez niezalogowany
1. Kod nie działa, ponieważ poruszasz bohaterem o 5, a przeszkoda ma grubość 1. Po prostu ją pomijasz. Lepiej sprawdzaj czy np. x obiektu + następny ruch jest mniejszy od x prawej barierki i jednocześnie większy od x + szerokość lewej barierki i to samo z y.

2. Takiego kodu nie pisze się proceduralnie!!! Pierw zajmij się obiektowością, a dopiero potem większe projekty!!! I uporządkuj kod, pousuwaj niepotrzebne rzeczy!!!
komentarz 22 listopada 2018 przez oliwzcak12 Użytkownik (550 p.)

ale kod działa problem polega na czymś zupełnie innym niż te linie które są tam z innego powodu chodzi tu o kolizje ze sprajtami z tablicy kod jest że tak powiem wycinkiem i nie chodzi tu broń boże o dopisywanie tam jeszcze czegoś dużego tylko chodziło bardziej o zrozumienie kolizji z tymi tablicami albo bardziej znalezienie sposobu na zrobienie tego.

Problem tak jak wrzuciłem w blok kodu leży w 

intersects(squares[i].getGlobalBounds())

bo jeżeli wrzucę tam liczbę odpowiadającą danemu kwadratowi to jest ok tylko jeżeli zrobię tak:

intersects(squares[1,2].getGlobalBounds()) 

albo jakkolwiek inaczej to nie działa i rozumiem dlaczego wiem że funkcja intersects bierze współrzędne (x,y) ale nwm jak zrobić to tak żeby zamiast pisania tak: 

if(postac.getGlobalBounds().intersects(squares[1].getGlobalBounds())||postac.getGlobalBounds().intersects(squares[2].getGlobalBounds())||...)

można było pisać tak:

if(postac.getGlobalBounds().intersects(squares[ilość_tablic].getGlobalBounds()))

czy po prostu żeby można było ilość sprajtów które mają mieć kolizję modyfikować.

komentarz 22 listopada 2018 przez oliwzcak12 Użytkownik (550 p.)

a ten kod jest taki lekko "zabałaganiony" bo tam są funkcje odpowiadające  za to wszystko tylko je wywaliłem bo są na początku żeby nie wrzucać aż takiego długiego kodu chociaż i tak wyszedł długi bo już mi się nie chciało jakoś specjalnie tego wywalać bo stwierdziłem że i tak jest dosyć przejrzysty żeby zobaczyć tylko o co dokładnie chodzi bo sprecyzowałem problem i dorzuciłem kod gdyby ktoś stwierdził że chcę zobaczyć jak wygląda tablica o którą mi chodzi i wgl laugh

 

komentarz 22 listopada 2018 przez niezalogowany
edycja 22 listopada 2018
1. Źle zrozumiałem, przepraszam.

2. Naprawdę do zrozumienia twojego błędu wystarczyłoby nauczyć się obiektówki, co i tak Cię nie minie.

A błąd polega na tym. Ty próbujesz po pierwsze do metody intersects podać naraz kilka rzeczy. A ta metoda przyjmuje naraz tylko jeden obiekt. Po drugie nie da naraz uzyskać się GlobalBounds z dwóch obiektów. Komputer i w pierwszy i w drugim przypadku nie wie który obiekt obsłużyć.

By to rozwiązać zrób to poprostu w pętli for, używając iteratora jako indeksu tablicy. Jeśli nadal nie rozumiesz to napisz, a wyśle Ci o co mi chodzi za pomocą kodu.

Byś mnie źle nie zrozumiał, chodzi mi o fora w środku, tzn. if z kolizją i tylko on ma być w środku tego fora

Podobne pytania

0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 17 marca 2019 w C i C++ przez Filipotyk Obywatel (1,280 p.)
0 głosów
0 odpowiedzi 586 wizyt
pytanie zadane 14 listopada 2019 w C i C++ przez Jakub Chomicz 1 Użytkownik (840 p.)
0 głosów
3 odpowiedzi 649 wizyt
pytanie zadane 2 maja 2019 w C i C++ przez Milo Obywatel (1,180 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...