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

c++ & sfml i usuwanie konkretnych trafionych obiektów

Object Storage Arubacloud
0 głosów
477 wizyt
pytanie zadane 30 stycznia 2017 w C i C++ przez BeSSeSSt Obywatel (1,190 p.)

Jako że 2 dni temu zamieściłem podobny wpis, i nie uzyskałem odpowiedzi ponawiam pytanie. Do rzeczy; naszym bohaterem jest statek kosmiczny, który potrafi strzelać (w kodzie: CircleShape - kula, wektor z kulami - kule). Oczywiście usuwanie kul wychodzących poza okno jest. Zeby gra byla ciekawa, postanowilem dodac przeciwnikow (w kodzie: CircleShape - mob, wektor z mobami - potwory). W 1 fali jest 5 potworow (w kodzie: liczba_mobow), okreslajaca ile ma byc potworow. Ale gdy sprobowalem dodaj usuwanie trafionego potwora:

for (int i=0; i<potwory.size(); i++)   // sprawdzenie z kolei kolizji ze wszystkimi potworami 
            {
                if (kula.getGlobalBounds().intersects(potwory[i].getGlobalBounds()) && potwory.size() <= liczba_mobow)   // wykrycie kolizji
                {
                    potwory.erase(potwory.begin() + (i));    //usunięcie z wektora wykrytego trafionego potwora
                    std::cout<<"potwory: "<<potwory.size()<<std::endl;    //test.....
                }
            }

Ale gdy strzelimy w jakiegos potwora to nic sie nie dzieje, poki potwor nie przekroczy pkt x (okolo na wysokosci statku, nie zaleznie na jakiej wysokosci zostal trafiony, bo wszystkie potwory sie poruszaja). Ale jest tego warunek; po trafieniu owego potwora nie mozna wydobyc kolejnych kuli, bo wtedy nawet na pkt x sie nie wykryje. (Bardzo dziwne). A to reszta kodu, ktora moze sie wam przydac:

class Fale    //na razie taka krótka klasa
{
 
protected:
 
    int x,y = -20;
 
};
 
(...)
 
class Fala_1 : public Fale
{
 
public:
 
    void fala1()
    {
        mob.setFillColor(Color::Red);
        liczba_mobow = 5;
        for (int i = 0; i<=liczba_mobow; i++)
        {
            x = rand()%width - 50;     //szerokość ekranu
            if (x < 0)    //tak żeby nie wystawał poza ekran
            {
                x = 30;
            }
 
            mob.setPosition(x,y);
 
            static sf::Clock clock;   //zegar tworzący potwora co sekundę
            if (clock.getElapsedTime().asSeconds() >= 1 && potwory.size() < liczba_mobow)
            {
                potwory.push_back(mob);    //dodanie potwora do wektora
                clock.restart();
            }
        }
 
        if (potwory.size() >= liczba_mobow)   
        {
            wykonano_f1 = true;     //zmienna określająca wykonanie 1 fali  
        }
 
    }
};
 
(...)
 
//w pętli głównej
if (!wykonano_f1)   //jeśli nie wykonano 1 fali to wykonaj
        {
            Fala_1 f1;
            f1.fala1();
        }

Myslalem nad uzyciem sprite jako obiektu, i usuwaniem trafionego za pomoca "this", ale nie wiem jak to zrobic. Prosze o pomoc.

 

ps. jak mogliscie zauwazyc od pewnego momentu nie uzywam polskich znakow, poniewaz podczas pisania cos sie zepsulo i klikajac Alt + a wlacza mi sie jakies menu jak w paincie, w ktorym moge wstawiac tekst i rysowac itp. na aktualnym ekranie, wiec z tym tez prosze o pomoc.

komentarz 30 stycznia 2017 przez BeSSeSSt Obywatel (1,190 p.)
i znowu nikt nie wie o co chodzi ;p

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 351 wizyt
pytanie zadane 28 stycznia 2017 w C i C++ przez BeSSeSSt Obywatel (1,190 p.)
+1 głos
2 odpowiedzi 646 wizyt
pytanie zadane 19 sierpnia 2018 w Nasze projekty przez Michał Muzyka Pasjonat (24,080 p.)
0 głosów
4 odpowiedzi 624 wizyt
pytanie zadane 24 maja 2018 w Nasze projekty przez Maciej Szostak Początkujący (290 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...