Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Strzelanie kilkoma pociskami

Ostatnio zmodyfikowano 2013-05-10 22:13
Autor Wiadomość
Noct
Temat założony przez niniejszego użytkownika
[SFML 2.0] Strzelanie kilkoma pociskami
» 2013-05-10 21:52:48
Witam. "Pracuję" obecnie nad strzelanką 2D. Napisanie strzelania jednym pociskiem nie stanowiło większego problemu. Chodzi o to, że nie mam pomysłu jak zrobić, żeby pocisk znikał "gdy kolizja==1". Jak dotąd, przesuwam go po prostu 10px za mapę i przy następnym strzale zmieniam pozycję. Również nie wiem, jak uzyskać strzelanie kilkoma pociskami, bez dodawania kilku sprite'ów.
W innych tematach znalazłem tylko porady dot. Allegro, o której mam zerowe pojęcie. Czy klasa byłaby tutaj dobrym rozwiązaniem? Np. wywoływanie w momencie strzału kolejnych jej obiektów? Jak po kolizji usuwać je z mapy, żeby nie zaśmiecać pamięci?

ot: Zaraz zakładam drugi temat, o przesuwaniu się mapy.

Tutaj fragment kodu:
C/C++
// boost
if( sf::Keyboard::isKeyPressed( sf::Keyboard::LShift ) )
{ boost = 1.5; }
else
{ boost = 1; }

// sterowanie i ostatni kierunek
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { postacX +=( - 1 * speed * boost ); dir = 4; }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { postacX +=( speed * boost ); dir = 6; }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { postacY +=( - 1 * speed * boost ); dir = 8; }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { postacY +=( speed * boost ); dir = 2; }

if(( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) ) && strzal == false )
{ strzal = true; pociskX = postacX + 58; pociskY = postacY + 20; pocisk.setPosition( pociskX, pociskY ); }

// ograniczenia rozmiaru mapy
if( postacX < 0 ) { postacX = 0; }
if( postacX > szerokosc - 46 ) { postacX = szerokosc - 46; }
if( postacY < 0 ) { postacY = 0; }
if( postacY > wysokosc - 46 ) { postacY = wysokosc - 46; }

// poczatek kolizji
if( pociskX >= szerokosc - 10 ) { kolizja = true; }

// poruszanie sie pocisku
if( strzal == true ) { pociskX += 5; if( kolizja == true ) { pociskX += 10; strzal = false; kolizja = false; } }


pocisk.setPosition( pociskX, pociskY );
postac.setPosition( postacX, postacY );

// widok
okno.clear( sf::Color( 90, 125, 70 ) );
okno.draw( postac );
okno.draw( pocisk );

// odswiezanie
okno.display();

Jeśli jeszcze coś mam dostarczyć, proszę pisać.
Pozdrawiam,
Noct
P-82611
DejaVu
» 2013-05-10 21:59:00
Użyj kontenera std::vector i każdy pocisk do niego dodawaj.

PS.
Frazy, które należy wpisać w wyszukiwarkę google:
P-82612
Noct
Temat założony przez niniejszego użytkownika
» 2013-05-10 22:08:51
A możesz mi jakoś to szerzej opisać? Z dokumentacji nie bardzo łapię.

PS:
http://oi44.tinypic.com/xc7k76.jpg
P-82614
pekfos
» 2013-05-10 22:13:43
A czytałeś dokumentację? Strzelam, że nie, bo są tam też opisane przykłady.

PS:
A czytałeś te tematy, czy tylko wchodziłeś, by łatwiej dostać odpowiedź (bo "szukałeś")?

PS2:
Niesamowite, pierwszy wynik w Googlach:
» Kurs STL, C++Kontener tablicy (std::vector) lekcja
P-82615
« 1 »
  Strona 1 z 1