[SFML 2.0] Strzelanie kilkoma pociskami
Ostatnio zmodyfikowano 2013-05-10 22:13
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: if( sf::Keyboard::isKeyPressed( sf::Keyboard::LShift ) ) { boost = 1.5; } else { boost = 1; }
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 ); }
if( postacX < 0 ) { postacX = 0; } if( postacX > szerokosc - 46 ) { postacX = szerokosc - 46; } if( postacY < 0 ) { postacY = 0; } if( postacY > wysokosc - 46 ) { postacY = wysokosc - 46; }
if( pociskX >= szerokosc - 10 ) { kolizja = true; }
if( strzal == true ) { pociskX += 5; if( kolizja == true ) { pociskX += 10; strzal = false; kolizja = false; } }
pocisk.setPosition( pociskX, pociskY ); postac.setPosition( postacX, postacY );
okno.clear( sf::Color( 90, 125, 70 ) ); okno.draw( postac ); okno.draw( pocisk );
okno.display();
Jeśli jeszcze coś mam dostarczyć, proszę pisać. Pozdrawiam, Noct |
|
DejaVu |
» 2013-05-10 21:59:00 Użyj kontenera std::vector i każdy pocisk do niego dodawaj. PS. |
|
Noct Temat założony przez niniejszego użytkownika |
» 2013-05-10 22:08:51 |
|
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: Kontener tablicy (std::vector) |
|
« 1 » |