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

[SFML 1.6] strzelanie seriami

Ostatnio zmodyfikowano 2013-11-21 21:56
Autor Wiadomość
Unnamed789
Temat założony przez niniejszego użytkownika
» 2012-12-23 21:45:57
A jak się podpina kod źródłowy do posta? lol
P-71807
SeaMonster131
» 2012-12-23 22:08:41
» KursyKurs STC kurs

Dokładniej mówiąc: [cpp] kod [/cpp]
P-71810
Unnamed789
Temat założony przez niniejszego użytkownika
» 2012-12-23 22:19:26
W takim razie ponawiam pytanie :)
C/C++
#include <SFML/Graphics.hpp>
#include <vector>



int main()
{
   
   
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "The Project" );
    //postac glowna
    sf::Image obrazek;
    obrazek.LoadFromFile( "ludek.png" );
   
    sf::Sprite naszSprajt;
    naszSprajt.SetImage( obrazek );
    naszSprajt.SetPosition( 400, 300 );
    naszSprajt.SetScale( 0.25, 0.25 );
   
    //pociski
    std::vector < sf::Shape > magazynek;
    bool czyWystrzelony = false;
   
   
    while( oknoAplikacji.IsOpened() ) // petla glowna programu
    {
        oknoAplikacji.Clear( sf::Color( 255, 0, 0 ) ); // ustawia kolor ekranu
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) ) // petla obslugi zdarzen
        {
            if( zdarzenie.Type == sf::Event::Closed )
                 oknoAplikacji.Close();
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape ) //obsługa zajścia zdarzenia wciśnięcia klawisza ESC
                 oknoAplikacji.Close(); //np. zamknięcie aplikacji
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Space ) {
                czyWystrzelony = true; //sprawdza czy pocisk zostal wystrzelony jezeli tak to wartosc true
                magazynek.push_back( sf::Shape::Circle( naszSprajt.GetPosition().x, naszSprajt.GetPosition().y + 67, 5, sf::Color::White ) ); } //ustawia pozycje, promien, kolor pocisku
           
        }
       
        const sf::Input & sterowanie = oknoAplikacji.GetInput(); //bezposredni dostep do klawiatury
        if( sterowanie.IsKeyDown( sf::Key::Left ) )
             naszSprajt.Move( - 0.2, 0 );
       
        if( sterowanie.IsKeyDown( sf::Key::Right ) )
             naszSprajt.Move( + 0.2, 0 );
       
        if( sterowanie.IsKeyDown( sf::Key::Up ) )
             naszSprajt.Move( 0, - 0.2 );
       
        if( sterowanie.IsKeyDown( sf::Key::Down ) )
             naszSprajt.Move( 0, + 0.2 );
       
       
        if( czyWystrzelony == true ) {
            for( unsigned int i = 0; i < magazynek.size(); i++ ) {
                oknoAplikacji.Draw( magazynek[ i ] ); //rysuje i wystrzeliwuje pocisk
                magazynek[ i ].Move( + 0.25, 0 );
                if( magazynek[ i ].GetPosition().x > 800 ) { magazynek.erase( magazynek.begin() + i ); }
            }
        }
       
       
        oknoAplikacji.Draw( naszSprajt ); //rysuje sprajta
        oknoAplikacji.Display(); // wyswietlanie okna aplikacji
    }
   
   
   
    return 0;
}
P-71812
DejaVu
» 2012-12-23 22:22:47
Nie rysujesz żadnego tła, a zatem wydajność aplikacji jest dużo wyższa, niż gdy zaczynasz smarować małe obiekty na scenie. Wypełnij całe tło jakąś teksturą, to rysowanie pocisków stanie się prawie nieodczuwalne.
P-71814
Unnamed789
Temat założony przez niniejszego użytkownika
» 2012-12-26 18:44:50
Trochę poeksperymentowałem i zauważyłem, że gdy zmienię swój pocisk z obiektu klasy Shape na obiekt klasy Sprite to uzyskuje znaczny przyrost fps. Jednak chciałbym zachować wygląd swojego pocisku, czy da się jakoś użyć obiektu klasy Shape jako obiektu klasy Sprite? 
P-72019
Mrovqa
» 2012-12-26 20:33:30
Możesz go sobie wyrenderować i potem wczytać z pliku.
P-72031
Raciawelli
» 2013-11-21 21:56:10
<< removed. Masz problem? - załóż odpowiedni temat >>
P-97012
1 « 2 »
Poprzednia strona Strona 2 z 2