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

[SFML]kolizja kwadrat - kwadrat cos nie działa

Ostatnio zmodyfikowano 2013-01-04 22:44
Autor Wiadomość
DanielSC
Temat założony przez niniejszego użytkownika
[SFML]kolizja kwadrat - kwadrat cos nie działa
» 2013-01-04 21:44:02
Usiłowałem napisać kolizje kwadrat kwadrat gdy ją napisałem chciałem aby po wykryciu kolizji kwadrat1 cofał się o jeden krok w przeciwną stronę.I tu pojawia się ten problem
Aplikacja dalej wykonuje cofanie chociaż kolizji formalnie juz nie powinno być . O to kod:

C/C++
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace sf;
using namespace std;




int main()
{
   
    RenderWindow Aplikacja( VideoMode( 900, 900, 32 ), "Aplikacja" ); //Style::Fullscreen );
    Shape kwadrat1, kwadrat2;
   
   
    float x1 = 100;
    float y1 = 100;
    float s1 = 100;
    float w1 = 100;
   
    float x2 = 600;
    float y2 = 600;
    float s2 = 100;
    float w2 = 100;
   
    bool kol1 = false;
    bool kol2 = false;
    bool kol3 = false;
    bool kol4 = false;
   
    bool CzyWystapilaKolizja = false;
   
    kwadrat2.AddPoint( x2, y2, Color::Red, Color::Red );
    kwadrat2.AddPoint( 600, 700, Color::Red, Color::Red );
    kwadrat2.AddPoint( 700, 700, Color::Red, Color::Red );
    kwadrat2.AddPoint( 700, 600, Color::Red, Color::Red );
   
    //#########################
    kwadrat1.AddPoint( x1, y1, Color::Green, Color::Green );
    kwadrat1.AddPoint( 100, 200, Color::Green, Color::Green );
    kwadrat1.AddPoint( 200, 200, Color::Green, Color::Green );
    kwadrat1.AddPoint( 200, 100, Color::Green, Color::Green );
   
    //#####################
   
   
   
   
   
   
    //########################
   
   
   
   
    while( Aplikacja.IsOpened() )
    {
        Event zdarzenie;
        while( Aplikacja.GetEvent( zdarzenie ) )
        {
            if( zdarzenie.Type == Event::Closed )
                 Aplikacja.Close();
           
            if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape )
                 Aplikacja.Close();
           
        }
       
        const Input & sterowanie = Aplikacja.GetInput();
       
        //=======================================
       
        if( x2 <= x1 + s1 && x2 > x1 && y2 >= y1 && y2 <= y1 + w1 )
        {
            kol1 = true;
        }
       
        if( x2 <= x1 + s1 && x2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 )
        {
            kol2 = true;
        }
       
        if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 >= y1 && y2 <= y1 + w1 )
        {
            kol3 = true;
        }
       
        if( x2 + s2 <= x1 + s1 && x2 + s2 > x1 && y2 + w2 >= y1 && y2 + w2 <= y1 + w1 )
        {
            kol4 = true;
        }
       
       
       
       
       
        //================================
       
        //czy wystapila kolizja jezeli tak wruc o ********
       
        if( kol1 == true || kol2 == true || kol3 == true || kol4 == true )
        {
            CzyWystapilaKolizja = true;
        }
       
        else CzyWystapilaKolizja = false;
       
        if( CzyWystapilaKolizja == true )
        {
            if( sterowanie.IsKeyDown( Key::Left ) )
            {
                kwadrat1.Move( + 0.5, 0 );
                x1 += 0.5;
            }
            if( sterowanie.IsKeyDown( Key::Right ) )
            {
                kwadrat1.Move( - 0.5, 0 );
                x1 -= 0.5;
            }
            if( sterowanie.IsKeyDown( Key::Down ) )
            {
                kwadrat1.Move( 0, - 0.5 );
                y1 -= 0.5;
            }
            if( sterowanie.IsKeyDown( Key::Up ) )
            {
                kwadrat1.Move( 0, 0.5 );
                y1 += 0.5;
               
            }
        }
       
        //***********************
       
       
       
       
       
       
        //---------------------------------------------------------------------------//ruch
       
        if( sterowanie.IsKeyDown( Key::Left ) || kol1 == true || kol2 == true || kol3 == true || kol4 == true )
        {
            kwadrat1.Move( - 0.2, 0 );
            x1 -= 0.2;
           
           
           
        }
       
        else kwadrat1.Move( 0, 0 );
        //----------------------------------------------
        if( sterowanie.IsKeyDown( Key::Right ) || kol1 == true || kol2 == true || kol3 == true || kol4 == true )
        {
            kwadrat1.Move( 0.2, 0 );
            x1 += 0.2;
           
        }
        else kwadrat1.Move( 0, 0 );
        //----------------------------------------------------------------------
        if( sterowanie.IsKeyDown( Key::Down ) || kol1 == true || kol2 == true || kol3 == true || kol4 == true )
        {
            kwadrat1.Move( 0, 0.2 );
            y1 += 0.2;
           
        }
       
       
       
        else kwadrat2.Move( 0, 0 );
        //----------------------------------------------------------------------
        if( sterowanie.IsKeyDown( Key::Up ) || kol1 == true || kol2 == true || kol3 == true || kol4 == true )
        {
            kwadrat1.Move( 0, - 0.2 );
            y1 -= 0.2;
           
        }
        else kwadrat1.Move( 0, 0 );
        //koniec ruchu-----------------------------------------------------------------------
       
       
       
       
       
       
       
       
       
       
        Aplikacja.Clear( Color( 0, 0, 0 ) );
        Aplikacja.Draw( kwadrat1 );
        Aplikacja.Draw( kwadrat2 );
        Aplikacja.Display();
       
    }
    return 0;
}

Na przyszłość kod wstawiaj w znaczniki [cpp] [/cpp] i nie rób tak długich linijek w kodzie bo się układ strony rozjeżdża. -ison
 
P-72964
Nevea
» 2013-01-04 22:30:11
Wstaw kod w znaczniki cpp [.cpp]twój kod[/.cpp] (bez kropek) będzie czytelniejszy.
P-72973
ison
» 2013-01-04 22:44:35
Nigdzie nie ustawiasz ponownie kol1, kol2, kol3 i kol4 na false.
P-72976
« 1 »
  Strona 1 z 1