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

[SFML 1.6] Kolizja i jej obsługa

Ostatnio zmodyfikowano 2012-07-07 12:13
Autor Wiadomość
wojownik266
Temat założony przez niniejszego użytkownika
[SFML 1.6] Kolizja i jej obsługa
» 2012-07-06 19:59:07
Jestem w trakcie tworzenia swojej pierwszej gry w SFML i  pierwszy problem z kolizją i jej obsługą. Mianowicie chodzi o to że mam dwa obrazki; jeden poruszany klawiszami a drugi statyczny, nieruchomy. Kiedy najadę obrazkiem ruchomym na statyczny ten statyczny powinien zmienic swoje położenie ale niestety tak się nie dzieje. Co jest źle napisane w poniższym kodzie!?

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

struct Boh
{
    int x;
    int y;
    int w;
    int h;
};
struct Wrog
{
    int x, y;
    int w, h;
};
bool kolizja( float x1, float y1, float s1, float w1, float x2, float y2, float s2, float w2 )
{
    if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true );
   
    return( false );
};

int main()
{
    sf::RenderWindow App;
    App.Create( sf::VideoMode( 640, 480 ), "SFML_Browarki" );
    // Load a cute background image to display :)
    sf::Image tlo;
    sf::Image kontener1;
    sf::Image harnas0;
   
    if( !tlo.LoadFromFile( "piwo_tlo.bmp" ) )
         return EXIT_FAILURE;
   
    if( !kontener1.LoadFromFile( "kontener.bmp" ) )
         return EXIT_FAILURE;
   
    if( !harnas0.LoadFromFile( "harnas.bmp" ) )
         return EXIT_FAILURE;
   
    sf::Sprite Background( tlo );
    sf::Sprite Kontener( kontener1 );
    sf::Sprite Harnas( harnas0 );
    harnas0.CreateMaskFromColor( sf::Color( 255, 0, 255 ), 0 ); //Usowanie rozowego tla
   
   
    Boh kont; //Kontener bohater
    kont.x = Kontener.GetPosition().x + 320;
    kont.y = Kontener.GetPosition().y + 320;
    kont.w = Kontener.GetPosition().x;
    kont.h = Kontener.GetPosition().y;
   
    Wrog piwo0;
    piwo0.x = Harnas.GetPosition().x + 100;
    piwo0.y = Harnas.GetPosition().y + 100;
    piwo0.w = Harnas.GetPosition().x;
    piwo0.h = Harnas.GetPosition().y;
   
    Kontener.SetPosition( kont.x, kont.y );
    Harnas.SetPosition( piwo0.x, piwo0.y );
    while( App.IsOpened() ) // Start the game loop
    {
        // Process events
        sf::Event Event;
        while( App.GetEvent( Event ) )
        {
            // Close window : exit
            if( Event.Type == sf::Event::Closed )
                 App.Close();
           
            // Escape key : exit
            if(( Event.Type == sf::Event::KeyPressed ) &&( Event.Key.Code == sf::Key::Escape ) )
                 App.Close();
           
        }
       
        // Get elapsed time
        float ElapsedTime = App.GetFrameTime();
       
        // Move the sprite
        if( App.GetInput().IsKeyDown( sf::Key::Left ) ) Kontener.Move( - kont.x * ElapsedTime, 0 );
       
        if( App.GetInput().IsKeyDown( sf::Key::Right ) ) Kontener.Move( kont.x * ElapsedTime, 0 );
       
        if( App.GetInput().IsKeyDown( sf::Key::Up ) ) Kontener.Move( 0, - kont.y * ElapsedTime );
       
        if( App.GetInput().IsKeyDown( sf::Key::Down ) ) Kontener.Move( 0, kont.y * ElapsedTime );
       
        if( kolizja( kont.x, kont.y, kont.h, kont.w, piwo0.x, piwo0.y, piwo0.h, piwo0.w ) == true )
        {
            Harnas.Move( piwo0.x, piwo0.y += 200 );
           
        }
        // Clear screen
        App.Clear();
        // Draw the background and apply the post-effect
        App.Draw( Background );
        App.Draw( Kontener );
        App.Draw( Harnas );
        // Finally, display the rendered frame on screen
        App.Display();
    }
    return EXIT_SUCCESS;
}
P-59604
wojownik266
Temat założony przez niniejszego użytkownika
» 2012-07-07 10:54:06
Nikt nic nie podpowie. Moze jakieś sugestie chociaż albo jakieś uwagi na marginesie? Jestem zawiedziony.
P-59650
wojownik266
Temat założony przez niniejszego użytkownika
» 2012-07-07 12:13:41
Problem doraźnie rozwiązałem przy pomocy kodu z tej strony: http://www.sfml-dev.org/wiki/en/sources/simple_collision_detection Jak by się kto pytał!
P-59655
« 1 »
  Strona 1 z 1