[Sfml]Kolizja okrąg okrąg
Ostatnio zmodyfikowano 2013-01-03 21:04
DanielSC Temat założony przez niniejszego użytkownika |
[Sfml]Kolizja okrąg okrąg » 2013-01-02 20:51:22 Chciałbym się was zaytać co robie nie tak w tej aplikacji.Otóż chciałen wywołac kolizje okrąg-okrąg a nie działa to tak jak powinno. #include <iostream> #include <SFML/Graphics.hpp> using namespace std; using namespace sf; int main() { RenderWindow Aplikacja( VideoMode( 600, 800, 32 ), "Kolizje" ); Shape kolo1 = Shape::Circle( 10, 10, 10, Color::Red ); Shape kolo2 = Shape::Circle( 100, 100, 50, Color::Green ); float pozycja1X = 10; float pozycja1Y = 10; float pozycja2X = 100; float pozycja2Y = 100; while( Aplikacja.IsOpened() ) { Event zdarzenie; while( Aplikacja.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == Event::Closed ) Aplikacja.Close(); } kolo1.GetPosition(); kolo2.GetPosition(); cout << "Roznica " << pozycja1X - pozycja2X << endl; const Input & sterowanie = Aplikacja.GetInput(); if( sterowanie.IsKeyDown( sf::Key::Left ) && pozycja2X - pozycja1X != 60 || pozycja2X - pozycja1X !=( - 60 ) ) { kolo1.Move( - 0.2, 0 ); pozycja1X -= 0.2; } else kolo1.Move( 0, 0 ); if( sterowanie.IsKeyDown( sf::Key::Right ) && pozycja2X - pozycja1X != 60 || pozycja2X - pozycja1X !=( - 60 ) ) { kolo1.Move( + 0.2, 0 ); pozycja1X += 0.2; } else kolo1.Move( 0, 0 ); if( sterowanie.IsKeyDown( sf::Key::Up ) && pozycja1Y - pozycja2Y != 60 ) { kolo1.Move( 0, - 0.2 ); pozycja1Y -= 0.2; } else kolo1.Move( 0, 0 ); if( sterowanie.IsKeyDown( sf::Key::Down ) && pozycja1Y - pozycja2Y != 60 ) { kolo1.Move( 0, + 0.2 ); pozycja1Y += 0.2; } else kolo1.Move( 0, 0 ); Aplikacja.Clear( Color( 0, 0, 255 ) ); Aplikacja.Draw( kolo1 ); Aplikacja.Draw( kolo2 ); Aplikacja.Display(); } return 0; } |
|
pekfos |
» 2013-01-02 20:56:33 Kolizja okrąg-okrąg jest wtedy, gdy odległość między środkami okręgów jest mniejsza od sumy promieni. |
|
Mrovqa |
» 2013-01-02 21:19:44 Kolizja okrąg-okrąg jest wtedy, gdy odległość między środkami okręgów jest mniejsza od sumy promieni. |
Mniejsza bądź równa. Przy równej kontakt już jest :) |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2013-01-02 21:56:38 Mniej więcej wiem kiedy jest kolizja.U mnie jest wtedy gdy odleglość miedzy punkami 1 okregu i 2 okręgu jest równa 60 a nie ma gdy jest różna od 60
f( sterowanie.IsKeyDown( sf::Key::Left )&&pozycja2X-pozycja1X>=60||pozycja2X-pozycja1X!=(-60) )//chodzi mi o te linie { kolo1.Move( - 0.2, 0 ); pozycja1X-=0.2; } A gdy odpale cały program to nie moge ruszyć okregiem w lewo i w prawo tam gdzie tak if jak powyżej zapisałem. |
|
DejaVu |
» 2013-01-02 22:56:35 |
|
Mrovqa |
» 2013-01-03 08:17:44 @DanielSC jeżeli wiesz co to są trójkąty i znasz twierdzenie Pitagorasa to możesz sobie to spokojnie obliczyć. Jeżeli nie znasz - Google. Tu trzeba jednego banalnego wzoru. |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2013-01-03 09:18:46 Jak mógłbym obliczyc z tego pierwiastek?
(pozycja1X-pozycja2X)*( pozycja1X-pozycja2X)+(pozycja1Y-pozycja2Y)*(pozycja1Y-pozycja2Y) |
|
Mrovqa |
» 2013-01-03 09:21:44 Jak mógłbym obliczyc z tego pierwiastek?
(pozycja1X-pozycja2X)*( pozycja1X-pozycja2X)+(pozycja1Y-pozycja2Y)*(pozycja1Y-pozycja2Y) |
1. Mnożenie jest szybsze od dzielenia - możesz porównać kwadraty. 2. |
|
« 1 » 2 |