[SFML, C++] Mapa sie nie wyswietla
Ostatnio zmodyfikowano 2011-12-13 15:26
Rughailon Temat założony przez niniejszego użytkownika |
[SFML, C++] Mapa sie nie wyswietla » 2011-12-12 16:04:16 Witam. Mam pewien problem. Chcialem stworzyć platformówke, lecz mapa nie chce sie wyswietlic.. Wyswietla sie tylko kilka kafelkow. Zdjecie: http://screenshooter.net/7731424/ijcwlovKod: #include <sfml/window.hpp> #include <sfml/graphics.hpp> #include <sfml/audio.hpp> #include <fstream>
using namespace std;
int mapa[ 20 ][ 500 ];
int mapa_y = 20; int mapa_x = 500;
template < class Tab >
void Load( Tab map ) { fstream file; file.open( "mapa.map", ios::in ); for( int y = 0; y < 20; y++ ) { for( int x = 0; x < 500; x++ ) { file >> mapa[ y ][ x ]; } } file.close(); }
int main() { sf::RenderWindow OknoGry( sf::VideoMode( 1024, 768, 32 ), "BITree 1.0.0" ); OknoGry.SetFramerateLimit( 120 ); Load( mapa ); sf::Image tlo; tlo.LoadFromFile( "Graphics/las.bmp" ); sf::Sprite las; las.SetImage( tlo ); las.SetPosition( - 2, - 253 ); las.SetScale( 2, 2 ); sf::Image gui; gui.LoadFromFile( "Graphics/gui.bmp" ); sf::Sprite gui1; gui1.SetImage( gui ); gui1.SetPosition( 85, - 70 ); gui1.SetScale( 1.2, 1.2 ); sf::Image obrazek; obrazek.LoadFromFile( "Graphics/Ludzik.bmp" ); sf::Sprite Bohater; Bohater.SetImage( obrazek ); Bohater.SetPosition( 250, 515 ); Bohater.SetScale( 2, 2 ); sf::Image pien; pien.LoadFromFile( "Pien.bmp" ); sf::Sprite p; p.SetImage( pien ); sf::Image liscie; liscie.LoadFromFile( "Liscie.bmp" ); sf::Sprite l; l.SetImage( liscie ); sf::Image trawa; trawa.LoadFromFile( "Trawa.bmp" ); sf::Sprite t; t.SetImage( trawa ); sf::Image trpi; trpi.LoadFromFile( "Trpi.bmp" ); sf::Sprite tp; tp.SetImage( trpi ); sf::Image ziemia; ziemia.LoadFromFile( "Ziemia.bmp" ); sf::Sprite z; z.SetImage( ziemia ); sf::Image kursor; kursor.LoadFromFile( "Kursor.bmp" ); sf::Sprite kursorek; kursorek.SetImage( kursor ); sf::Font mojaCzcionka; mojaCzcionka.LoadFromFile( "Stellina.ttf", 30 * 5 ); while( OknoGry.IsOpened() ) { sf::Event zdarzenie; while( OknoGry.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::KeyPressed && zdarzenie.Key.Code == sf::Key::Escape ) { OknoGry.Close(); } if( zdarzenie.Key.Code == sf::Key::F1 ) { sf::Image zrzutEkranu = OknoGry.Capture(); zrzutEkranu.SaveToFile( "Zrzut Ekranu.png" ); } } const sf::Input & sterowanie = OknoGry.GetInput(); sf::Vector2f mysz = OknoGry.ConvertCoords( sterowanie.GetMouseX(), sterowanie.GetMouseY() ); if( sterowanie.IsKeyDown( sf::Key::Left ) ) Bohater.Move( - 1.0, 0 ); if( sterowanie.IsKeyDown( sf::Key::Right ) ) Bohater.Move( + 1.0, 0 ); if( sterowanie.IsKeyDown( sf::Key::Up ) ) Bohater.Move( 0, - 1.6 ); if( sterowanie.IsKeyDown( sf::Key::Down ) ) Bohater.Move( 0, + 1.6 ); for( int y = 0; y < 20; y++ ) { for( int x = 0; x < 500; x++ ) { if( mapa[ y ][ x ] == 1 ) { p.SetPosition( x * 31, y * 32 ); OknoGry.Draw( p ); } if( mapa[ y ][ x ] == 2 ) { l.SetPosition( x * 31, y * 32 ); OknoGry.Draw( l ); } if( mapa[ y ][ x ] == 3 ) { t.SetPosition( x * 31, y * 32 ); OknoGry.Draw( t ); } if( mapa[ y ][ x ] == 4 ) { tp.SetPosition( x * 31, y * 32 ); OknoGry.Draw( tp ); } if( mapa[ y ][ x ] == 5 ) { z.SetPosition( x * 31, y * 32 ); OknoGry.Draw( z ); } } } OknoGry.Clear( sf::Color( 255, 255, 255 ) ); OknoGry.Draw( las ); OknoGry.Draw( Bohater ); OknoGry.Draw( p ); OknoGry.Draw( l ); OknoGry.Draw( t ); OknoGry.Draw( tp ); OknoGry.Draw( z ); OknoGry.Draw( gui1 ); OknoGry.Draw( kursorek ); sf::String tekst( L"Alpha 1.0.0" ); tekst.SetSize( tekst.GetSize() * 1 ); tekst.SetPosition( 650, 25 ); tekst.SetFont( mojaCzcionka ); OknoGry.Draw( tekst ); OknoGry.Display(); } return 0; }
|
|
pekfos |
» 2011-12-12 16:51:15 bo rysujesz, czyścisz i rysujesz kilka. Piszesz bez zrozumienia?
Btw. live - żyć, life - życie. Chyba się pomyliłeś.. |
|
Rughailon Temat założony przez niniejszego użytkownika |
LOL » 2011-12-12 20:29:09 Dzieki. Troche poprawilem kod.. Ale nadal terenu nie bylo. A wpadlo mi do glowy, ze moze tlo zakrywa cale kafelki. I mialem racje.. :D Ale pojawil sie nowy problem. Sa przerwy miedzy kafelkami. Screen: http://screenshooter.net/7731424/vdtjolx |
|
hincu |
» 2011-12-12 21:03:16 zmniejsz szerokosc i wysokosc wyswietlania kafli o 1 : P |
|
m4tx |
» 2011-12-12 22:03:52 Wyłącz antyaliasing. |
|
DejaVu |
» 2011-12-12 22:13:55 True - to jest wina antyaliasingu (należy wyłączyć SetSmooth). |
|
Rughailon Temat założony przez niniejszego użytkownika |
» 2011-12-13 15:26:10 Działa! Dzieki za pomoc. :) |
|
« 1 » |