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

[SFML 2.0] Proste strzelanie, a zatrzymanie pocisku po zwolnieniu spacji

Ostatnio zmodyfikowano 2012-11-15 16:30
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[SFML 2.0] Proste strzelanie, a zatrzymanie pocisku po zwolnieniu spacji
» 2012-11-15 15:02:11
Po paru godzinach wytężonej pracy i myślenia, wyprodukowałem program którego kod zamieszczam poniżej. Program w 95% działa zgodnie z moim pomysłem. Problemem natomiast jest to że kiedy zwolnię spacje to pocisk zostaje w tym miejscu w którym zastała go zwolniona spacja... Czy ktoś mógłby rzucić okiem na ten kod i powiedzieć co jest nie tak, co dopisać, co wyrzucić, co zmienić itd...? Byłbym niezmiernie wdzięczny za wszystkie odpowiedzi poparte odpowiednim kodem...Dziękuję!

C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow App( sf::VideoMode( 640, 480, 32 ), " SFML 2.0 Proste Strzelanie" );
    sf::Texture statek, pocisk;
    statek.loadFromFile( "statek.png" );
    pocisk.loadFromFile( "pocisk.png" );
    sf::Sprite Statek( statek );
    sf::Sprite Pocisk( pocisk );
   
    float statx = 320, staty = 420;
    float pocx = 345, pocy = 440;
    float tpocx = 345, tpocy = 440;
   
    while( App.isOpen() )
    {
        sf::Event Event;
        while( App.pollEvent( Event ) )
        {
           
            if(( Event.type == sf::Event::Closed ) ||( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Escape ) )
           
            {
                App.close();
            }
           
           
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
       
        {
            statx -= 0.5;
            pocx -= 0.5;
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
        {
            statx += 0.5;
            pocx += 0.5;
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) )
        {
            pocy -= 0.5;
            tpocy -= 0.5;
           
            if( tpocy <= 0 && pocy <= 0 )
            {
                tpocx = statx + 20;
                tpocy = staty + 25;
                pocx = statx + 20;
                pocy = staty + 25;
                Pocisk.setPosition( pocx, pocy );
            }
        }
       
        Pocisk.setPosition( tpocx, tpocy );
        Statek.setPosition( statx, staty );
        App.clear();
        App.draw( Pocisk );
        App.draw( Statek );
        App.display();
       
    }
    return EXIT_SUCCESS;
}
P-69301
SeaMonster131
» 2012-11-15 15:54:15
Możesz to napisać mniej więcej tak:
C/C++
bool strzal = false;


if( spacja )
{
    pociskX = bohaterX;
    pociskY = bohaterY;
    strzal = true;
}

if( strzal )
{
    przemieszczanie pocisku;
    if( pocisk wyjdzie poza ekran && itd )
         strzal = false;
   
}
P-69307
wojownik266
Temat założony przez niniejszego użytkownika
» 2012-11-15 16:30:30
Wszystko działa aż miło. Poniżej kod z naniesionymi poprawkami. Może komuś się przyda. SeaMonster131 Jesteś wielki! Dziękuję!

C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow App( sf::VideoMode( 640, 480, 32 ), " SFML 2.0 Proste Strzelanie" );
    sf::Texture statek, pocisk;
    statek.loadFromFile( "statek.png" );
    pocisk.loadFromFile( "pocisk.png" );
    sf::Sprite Statek( statek );
    sf::Sprite Pocisk( pocisk );
   
    float statx = 320, staty = 420;
    float pocx = 345, pocy = 440;
   
    bool shoot = false;
    while( App.isOpen() )
    {
        sf::Event Event;
        while( App.pollEvent( Event ) )
        {
           
            if(( Event.type == sf::Event::Closed ) ||( Event.type == sf::Event::KeyPressed ) &&( Event.key.code == sf::Keyboard::Escape ) )
            {
                App.close();
            }
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
        {
            statx -= 0.5;
            //pocx-=0.5;
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
        {
            statx += 0.5;
            //pocx+=0.5;
        }
       
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Space ) )
        {
            pocx = statx + 20;
            pocy = staty + 25;
            Pocisk.setPosition( pocx, pocy );
            shoot = true;
        }
        if( shoot )
        {
            pocy -= 0.5;
            if( pocy <=( - 10 ) ) {
                shoot = false;
            }
           
        }
       
        Pocisk.setPosition( pocx, pocy );
        Statek.setPosition( statx, staty );
        App.clear();
        App.draw( Pocisk );
        App.draw( Statek );
        App.display();
       
    }
    return EXIT_SUCCESS;
}
P-69309
« 1 »
  Strona 1 z 1