Gabes |
» 2013-02-22 11:39:33 Załóżmy że mamy tablice mape kafli, ekran 800x600: int Tab[ 15 ][ 20 ] = { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 2, 2, 1, 3 }, { 0, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 }, { 2, 1, 2, 2, 1, 2, 0, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 0, 2, 0 }, { 2, 1, 2, 2, 1, 2, 0, 2, 0, 1, 1, 1, 0, 2, 0, 0, 0, 0, 2, 2 }, { 1, 1, 1, 2, 1, 1, 0, 2, 0, 2, 2, 2, 2, 2, 2, 0, 2, 1, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2 }, { 2, 1, 1, 1, 1, 2, 1, 1, 1, 0, 1, 2, 1, 2, 1, 2, 2, 1, 2, 2 }, { 1, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 0, 1, 2, 1, 2, 2, 1, 2, 2 }, { 1, 2, 2, 1, 1, 0, 1, 1, 0, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 2 }, { 1, 1, 2, 1, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2 }, { 2, 1, 2, 1, 1, 1, 2, 0, 0, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0 }, { 1, 1, 2, 2, 2, 2, 1, 2, 0, 2, 2, 2, 2, 2, 1, 2, 2, 2, 0, 2 }, { 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 2, 0, 1, 1, 0, 0, 0 }, { 2, 1, 2, 2, 0, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 2, 2, 0, 2 }, { 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 0, 2, 0, 0, 1, 0, 0, 3 } }; Bitmapa 160x160, jeden fragment 40x40 pikseli(4x4). #include <SFML/Graphics.hpp> #include"tab.h" using namespace sf; bool Smooth = false; int szer = 40, wys = 40; int main() { RenderWindow program( VideoMode( 800, 600, 32 ), "Mapa" ); Image obrazek; obrazek.SetSmooth( Smooth ); obrazek.LoadFromFile( "mapa.png" ); Sprite sprite; sprite.SetImage( obrazek ); while( program.IsOpened() ) { Event zdarzenie; while( program.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == Event::Closed ) program.Close(); } program.Clear( Color( 160, 160, 160, 0 ) ); for( int y = 0; y < 15; y++ ) { for( int x = 0; x < 20; x++ ) { sprite.SetSubRect( IntRect( Tab[ y ][ x ] % 4 * szer, Tab[ y ][ x ] / 4 * wys, Tab[ y ][ x ] * szer + szer, Tab[ y ][ x ] * wys + wys ) ); sprite.SetPosition( szer * x, wys * y ); program.Draw( sprite ); } }; program.Display(); } return 0; } Bitmapa 640x40, jeden fragment 40x40 pikseli(16x1). fragment: program.Clear( Color( 160, 160, 160, 0 ) ); for( int y = 0; y < 15; y++ ) { for( int x = 0; x < 20; x++ ) { sprite.SetSubRect( IntRect( Tab[ y ][ x ] * szer, 0, Tab[ y ][ x ] * szer + szer, wys ) ); sprite.SetPosition( szer * x, wys * y ); program.Draw( sprite ); } }; mam nadzieje że nie przekombinowałem. |