[SFML 1.6] Kolizja i jej obsługa
Ostatnio zmodyfikowano 2012-07-07 12:13
wojownik266 Temat założony przez niniejszego użytkownika |
[SFML 1.6] Kolizja i jej obsługa » 2012-07-06 19:59:07 Jestem w trakcie tworzenia swojej pierwszej gry w SFML i pierwszy problem z kolizją i jej obsługą. Mianowicie chodzi o to że mam dwa obrazki; jeden poruszany klawiszami a drugi statyczny, nieruchomy. Kiedy najadę obrazkiem ruchomym na statyczny ten statyczny powinien zmienic swoje położenie ale niestety tak się nie dzieje. Co jest źle napisane w poniższym kodzie!?
#include <SFML/Graphics.hpp>
struct Boh { int x; int y; int w; int h; }; struct Wrog { int x, y; int w, h; }; bool kolizja( float x1, float y1, float s1, float w1, float x2, float y2, float s2, float w2 ) { if( x1 + s1 >= x2 && x1 <= x2 + s2 && y1 + w1 >= y2 && y1 <= y2 + w2 ) return( true ); return( false ); };
int main() { sf::RenderWindow App; App.Create( sf::VideoMode( 640, 480 ), "SFML_Browarki" ); sf::Image tlo; sf::Image kontener1; sf::Image harnas0; if( !tlo.LoadFromFile( "piwo_tlo.bmp" ) ) return EXIT_FAILURE; if( !kontener1.LoadFromFile( "kontener.bmp" ) ) return EXIT_FAILURE; if( !harnas0.LoadFromFile( "harnas.bmp" ) ) return EXIT_FAILURE; sf::Sprite Background( tlo ); sf::Sprite Kontener( kontener1 ); sf::Sprite Harnas( harnas0 ); harnas0.CreateMaskFromColor( sf::Color( 255, 0, 255 ), 0 ); Boh kont; kont.x = Kontener.GetPosition().x + 320; kont.y = Kontener.GetPosition().y + 320; kont.w = Kontener.GetPosition().x; kont.h = Kontener.GetPosition().y; Wrog piwo0; piwo0.x = Harnas.GetPosition().x + 100; piwo0.y = Harnas.GetPosition().y + 100; piwo0.w = Harnas.GetPosition().x; piwo0.h = Harnas.GetPosition().y; Kontener.SetPosition( kont.x, kont.y ); Harnas.SetPosition( piwo0.x, piwo0.y ); while( App.IsOpened() ) { sf::Event Event; while( App.GetEvent( Event ) ) { if( Event.Type == sf::Event::Closed ) App.Close(); if(( Event.Type == sf::Event::KeyPressed ) &&( Event.Key.Code == sf::Key::Escape ) ) App.Close(); } float ElapsedTime = App.GetFrameTime(); if( App.GetInput().IsKeyDown( sf::Key::Left ) ) Kontener.Move( - kont.x * ElapsedTime, 0 ); if( App.GetInput().IsKeyDown( sf::Key::Right ) ) Kontener.Move( kont.x * ElapsedTime, 0 ); if( App.GetInput().IsKeyDown( sf::Key::Up ) ) Kontener.Move( 0, - kont.y * ElapsedTime ); if( App.GetInput().IsKeyDown( sf::Key::Down ) ) Kontener.Move( 0, kont.y * ElapsedTime ); if( kolizja( kont.x, kont.y, kont.h, kont.w, piwo0.x, piwo0.y, piwo0.h, piwo0.w ) == true ) { Harnas.Move( piwo0.x, piwo0.y += 200 ); } App.Clear(); App.Draw( Background ); App.Draw( Kontener ); App.Draw( Harnas ); App.Display(); } return EXIT_SUCCESS; }
|
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-07-07 10:54:06 Nikt nic nie podpowie. Moze jakieś sugestie chociaż albo jakieś uwagi na marginesie? Jestem zawiedziony. |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-07-07 12:13:41 Problem doraźnie rozwiązałem przy pomocy kodu z tej strony: http://www.sfml-dev.org/wiki/en/sources/simple_collision_detection Jak by się kto pytał! |
|
« 1 » |