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.