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

[SFML] Kolizja

Ostatnio zmodyfikowano 2012-01-19 11:08
Autor Wiadomość
tomek5321
Temat założony przez niniejszego użytkownika
[SFML] Kolizja
» 2012-01-18 12:24:22
Zarejestrowałem się na tym forum, bo od jakiegoś czasu ciągle męczę się z tymi kolizjami. Większość tematów jest z kolizjami z Allegro. Mógłby mi ktoś podać przykład takiej kolizji obiektów bez tła w SFMLu? W jaki sposób podać współrzędne obiektu? Wystarczy to?
C/C++
//postacie
sf::Image obohater, owrog, otlo;
sf::Sprite bohater, wrog, tlo;

obohater.LoadFromFile( "Obiekty/bohater.png" );
owrog.LoadFromFile( "Obiekty/bohater.png" );
otlo.LoadFromFile( "Obiekty/tlo.jpg" );

tlo.SetImage( otlo ); bohater.SetPosition( 0, 0 );

bohater.SetImage( obohater );
bohater.SetPosition( 500, 300 );
bohater.SetScale( 0.5, 0.5 );

wrog.SetImage( owrog );
wrog.SetPosition( 300, 500 );
wrog.SetScale( 0.5, 0.5 );
P-48634
Dark
» 2012-01-18 16:33:12
zachęcam do skorzystania z kursu sfml znajdującego się na stronie. współrzędne odczytuje się np.
obiekt.GetPosition().x
P-48645
hincu
» 2012-01-18 16:39:35
po 1 fizyka kolizji jest taka sama czy to sdl allegro ogl sfml wiec nie rozumiem w czym problem
po 2 na stronie sfml wejdz w wiki source codes i tam masz przykladowy kod kolizji aabb per pixel i jeszcze jakis :P
tyle w temacie
P-48646
tomek5321
Temat założony przez niniejszego użytkownika
» 2012-01-18 17:24:16
I jeszcze jedna rzecz. Dlaczego mój ludek wychodzi za ekran?
C/C++
const sf::Input & sterowanie = oknoAplikacji.GetInput(); //sterowanie

if( sterowanie.IsKeyDown( sf::Key::Left ) ) if( b_x >= 0 ) bohater.Move( - 0.2, 0 );

if( sterowanie.IsKeyDown( sf::Key::Right ) ) if( b_x <= 690 ) bohater.Move( + 0.2, 0 );

if( sterowanie.IsKeyDown( sf::Key::Up ) ) if( b_y >= 0 ) bohater.Move( 0, - 0.2 );

if( sterowanie.IsKeyDown( sf::Key::Down ) ) if( b_y <= 490 ) bohater.Move( 0, + 0.2 );

P-48647
SeaMonster131
» 2012-01-18 17:27:36
Ja bym zamienił >= na > oraz <= na <.
P-48649
tomek5321
Temat założony przez niniejszego użytkownika
» 2012-01-18 17:33:04
Nadal to samo, a no i jeszcze to:
C/C++
int b_x, b_y, w_y, w_x;
b_x = 680;
b_y = 480;
w_y = 0;
w_x = 0;

bohater.SetImage( obohater );
bohater.SetPosition( b_x, b_y );
bohater.SetScale( 0.2, 0.2 );
P-48650
hincu
» 2012-01-18 17:39:58
zrob sobie dodatkowa zmienna sf::Vector2f i tam zapisuj pozycje postaci przed kolizja
jesli kolizja wystepuje to cofaj sie to tej pozycji
sf::Vector2f SPos;
sf::Vector2f EPos;

od start oraz end :P
P-48651
tomek5321
Temat założony przez niniejszego użytkownika
» 2012-01-18 17:51:27
Dzięki :)
@hincu
Znalazłem taką stronie  po wpisaniu frazy  source codes collision sfml:http://www.sfml-dev.org/wiki/en/sources/simple_collision_detection
Czy wystarczy, że utworze  2 pliki Colision.cpp i Collision.h, a następnie do głównej części programu dodam dyrektywę #include "Colision.h" i wsadzę kod:
Collision::PixelPerfectTest( const sf::Sprite & Object1, const sf::Sprite & Object2, sf::Uint8 AlphaLimit )
 to kolizja powinna zadziałać?
P-48654
« 1 » 2 3 4 5 6
  Strona 1 z 6 Następna strona