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

[Sfml]Kolizja okrąg okrąg

Ostatnio zmodyfikowano 2013-01-03 21:04
Autor Wiadomość
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.

C/C++
#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 ); //Gracz
    Shape kolo2 = Shape::Circle( 100, 100, 50, Color::Green ); // przeszkoda
   
    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 ) ) //chodzi mi o te linie
        {
            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 ) ) //chodzi mi glownie o te linie
        {
            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;
}
P-72789
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.
P-72790
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 :)
P-72792
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.
P-72795
DejaVu
» 2013-01-02 22:56:35
Tak się nie liczy odległości między dwoma punktami.
Frazy, które należy wpisać w wyszukiwarkę google:
http://cpp0x.pl/forum/temat/?id=120
P-72799
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.
P-72804
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)
P-72805
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.
Frazy, które należy wpisać w wyszukiwarkę google:
P-72806
« 1 » 2
  Strona 1 z 2 Następna strona