wojownik266 Temat założony przez niniejszego użytkownika |
[sfml] Kolizja bohatera z mapą kafelkową » 2015-02-21 13:32:19 Zabrałem się z pisanie mojej pierwszej gry w SFML'u 2.x i ten kod który widać poniżej to moje dokonanie z ostatnich paru dnii. Całość, pomijając kolizję bohatera z mapą kafelkową, działa zgodnie z moimi oczekiwaniami. Natomiast problemem jest, jak już wspomniałem, wykrywanie kolizji mapy z ludkiem. Chodzi o to że nie wiem jak się za to zabrać. Czy moglibyście mnie ukierunkować, udzielić kilku wskazówek popartych odpowiednim kodem, tak abym mógł tą kolizję wymęczyć (tzn. napisać)? Moja kolizja, która nie działa. for( int i = 0; i < 25; ++i ) for( int j = 0; j < 20; ++j ) { if( abs( level[ i - 32 ] ) > 20 || abs( level[ j - 32 ] > 20 ) ) { } }
#include <SFML/Graphics.hpp> #include "tilemap.hpp" #include "fps.hpp" #include "kolizja.h"
int main() { sf::RenderWindow window( sf::VideoMode( 800, 600 ), "Labirynt" ); sf::Texture backg; sf::Texture kula; sf::Texture brick[ 10 ]; backg.loadFromFile( "back.png" ); sf::Sprite Back( backg ); kula.loadFromFile( "kula.png" ); sf::Sprite Kula( kula ); brick[ 0 ].loadFromFile( "brick.png" ); brick[ 1 ].loadFromFile( "brick.png" ); brick[ 2 ].loadFromFile( "brick.png" ); brick[ 3 ].loadFromFile( "brick.png" ); sf::Sprite Brick_0( brick[ 0 ] ); float brx_0 = 352, bry_0 = 480; float x = 400, y = 540; const int level[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; TileMap map; if( !map.load( "mapa.png", sf::Vector2u( 32, 32 ), level, 25, 20 ) ) return - 1; FPS fp; while( window.isOpen() ) { sf::Event event; while( window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) window.close(); else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Escape ) ) { window.close(); } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { x -= 5; } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { x += 5; } else if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { y -= 5; } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) ) { y += 5; } fp.getFPS(); fp.update(); if( kolizja( brx_0, bry_0, x, y ) == true ) { brx_0 = 123; } for( int i = 0; i < 25; ++i ) for( int j = 0; j < 20; ++j ) { if( abs( level[ i - 32 ] ) > 20 || abs( level[ j - 32 ] > 20 ) ) { } } } Back.setPosition( 0, 0 ); Kula.setPosition( x, y ); Brick_0.setPosition( brx_0, bry_0 ); window.clear(); window.draw( Back ); window.draw( Kula ); window.draw( Brick_0 ); window.draw( map ); window.display(); } return 0; }
|