[SFML]kolizja kwadrat - kwadrat cos nie działa
Ostatnio zmodyfikowano 2013-01-04 22:44
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: #include <SFML/Graphics.hpp> #include <iostream> using namespace sf; using namespace std;
int main() { RenderWindow Aplikacja( VideoMode( 900, 900, 32 ), "Aplikacja" ); 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; } 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; } } 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 ); 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 | |
|
Nevea |
» 2013-01-04 22:30:11 Wstaw kod w znaczniki cpp [.cpp]twój kod[/.cpp] (bez kropek) będzie czytelniejszy. |
|
ison |
» 2013-01-04 22:44:35 Nigdzie nie ustawiasz ponownie kol1, kol2, kol3 i kol4 na false. |
|
« 1 » |