Dark Temat założony przez niniejszego użytkownika |
[SFML, C++] Problem z kafelkami i zapisywanie koordów obiektów » 2011-08-18 15:28:36 Mam problem z mapa kafelkowa ponieważ jak próbuję ją wyświetlić to między spritami pokazuje mi się 1 pixelowa przestrzeń jak na tym zrzucie, wszystkie kafelki mam umieszczone w tablicy więc powinno nie być tej przestrzeni :\:
http://ifotos.pl/zobacz/zrzut_hahpheh.PNG/
Co mogę zrobić aby takie coś nie następowało? Kod:
#include "head.h"
int main() { int map[ 10 ][ 20 ] = { { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1 }, { 1, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 3, 3, 2, 3, 3, 3, 3, 3, 1 }, { 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1 }, { 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1 }, { 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 1 }, { 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 1 }, { 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 1 }, { 1, 4, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, }; sf::RenderWindow okno( sf::VideoMode( 800, 600, 32 ), "Crion" ); okno.SetFramerateLimit( 60 ); sf::Event Event; sf::Image ziemia1; ziemia1.LoadFromFile( "kamien1.png" ); sf::Sprite grounds; grounds.SetImage( ziemia1 ); sf::Image _box; _box.LoadFromFile( "ludz1.png" ); _box.CreateMaskFromColor( sf::Color::Black, 0 ); sf::Sprite box; box.SetImage( _box ); sf::String text; text.SetText( "Skok" ); text.SetPosition( 400, 50 ); int klatka = 0; short int szerokosc_kafel_1 = ziemia1.GetWidth(); short int dlugosc_kafel_1 = ziemia1.GetHeight(); double a = 800; double v = 0; double dt = 0; double vx = 0; double ax = 1000; double vx_max = 350; bool jump = true; for( int y = 0; y < 10; y++ ) { for( int x = 0; x < 20; x++ ) { if( map[ y ][ x ] == 4 ) { box.SetPosition( x * szerokosc_kafel_1, y * dlugosc_kafel_1 ); } } } while( okno.IsOpened() ) { for( int y = 0; y < 10; y++ ) { for( int x = 0; x < 20; x++ ) { if( map[ y ][ x ] == 1 ) { grounds.SetPosition( x * szerokosc_kafel_1, y * dlugosc_kafel_1 ); okno.Draw( grounds ); } } } if( klatka <= 30 ) { if( klatka < 15 ) box.SetSubRect( sf::IntRect( 0, 0, 40, 40 ) ); else box.SetSubRect( sf::IntRect( 0, 40, 40, 80 ) ); klatka++; } else klatka = 0; const sf::Input & Input = okno.GetInput(); bool left = Input.IsKeyDown( sf::Key::Left ); bool right = Input.IsKeyDown( sf::Key::Right ); bool up = Input.IsKeyDown( sf::Key::Up ); bool down = Input.IsKeyDown( sf::Key::Down ); dt = double( okno.GetFrameTime() ); v += a * dt; if( left ) { if( vx - ax * dt > - vx_max ) vx -= ax * dt; } else if( right ) { if( vx + ax * dt < vx_max ) vx += ax * dt; } else { if( jump ) { if( vx > 0 ) vx -= ax * dt / 10; if( vx < 0 ) vx += ax * dt / 10; if( box.GetPosition().y < 400 ) v -= v * dt / 1.5; if( v <= - 55000 * dt ) v = - 55000 * dt; } else { if( vx > 0 ) vx -= ax * dt / 1.5; if( vx < 0 ) vx += ax * dt / 1.5; } if( vx <= vx_max / 10 && vx >= 0 ) vx = 0; if( vx >= - vx_max / 10 && vx <= 0 ) vx = 0; } box.Move( vx * dt, v * dt ); if( box.GetPosition().y >= 400 ) { box.SetY( 400 ); jump = false; } else jump = true; if( box.GetPosition().y <= 0 ) box.SetY( 0 ); if( box.GetPosition().x <= 0 ) box.SetX( 0 ); if( box.GetPosition().x >= 750 ) box.SetX( 750 ); if( jump ) okno.Draw( text ); while( okno.GetEvent( Event ) ) { if( Event.Type == sf::Event::Closed ) okno.Close(); if(( Event.Type == sf::Event::KeyPressed ) &&( Event.Key.Code == sf::Key::Escape ) ) okno.Close(); if( up && !jump ) v -= 55000 * dt; } okno.Draw( box ); okno.Display(); okno.Clear(); } return 0; }
Jak mogę zapisać koordy obiektów? W klasie, strukturze? |