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.