DanielSC Temat założony przez niniejszego użytkownika |
[SFML] Problem z mapą kafelkową » 2012-11-04 17:55:53 co zrobilem zle? #include <SFML/Graphics.hpp>
int mapa[ 3 ][ 3 ] = { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
int main() { sf::Image obrazek; obrazek.LoadFromFile( "tlo.png" ); sf::Sprite sprajt1; sprajt1.SetImage( obrazek ); sf::RenderWindow aplikacja( sf::VideoMode( 800, 600, 32 ), "Mapa" ); while( aplikacja.IsOpened() ) { sf::Event zdarzenie; while( aplikacja.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) aplikacja.Close(); } for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 3; j++ ) { if( map[ i ][ j ] == 1 ) aplikacja.Draw( sprajt1 ); } } aplikacja.Clear(); aplikacja.Display(); } return 0; }
|
|
SeaMonster131 |
» 2012-11-04 18:10:15 Następnym razem wytłumacz na czym polega błąd.
W tym wypadku nie ustawiasz pozycji "sprajt1". |
|
Mrovqa |
» 2012-11-04 18:11:22 Nie ująłeś kodu w znaczniki [cpp][/cpp] i nie napisałeś Twojego problemu.@up widzę, iż mnie uprzedziłeś :) |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2012-11-04 21:11:28 #include <SFML/Graphics.hpp> int mapa[ 3 ][ 3 ] = { { 1, 1, 2 }, { 2, 1, 2 }, { 2, 2, 1 } };
int main() { sf::Image obrazek; obrazek.LoadFromFile( "tlo.png" ); sf::Sprite sprajt1; sprajt1.SetImage( obrazek ); sf::RenderWindow aplikacja( sf::VideoMode( 800, 600, 32 ), "Mapa" ); while( aplikacja.IsOpened() ) { sf::Event zdarzenie; while( aplikacja.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) aplikacja.Close(); } for( int i = 0; i < 3; i++ ) { for( int j = 0; j < 3; j++ ) { if( mapa[ i ][ j ] == 2 ) sprajt1.SetPosition( 0, 0 ); aplikacja.Draw( sprajt1 ); } } aplikacja.Clear(); aplikacja.Display(); } return 0; }
Program się otworzył i działa poprawnie.Ale chciałbym się was zapytać jak w miejsce tablicy np.mapa[0][1] wstawić sprajt który by imitował dajmy to kawałek podłoża np. grunt .Jak by taki kod wyglądał i co trzeba by dopisać do tego już istniejącego programu żeby po otworzeniu ukazało mi się okienko o wymiarach 800 na 600 z kawałkiem gruntu w jakimś miejscu które było by określone przez tablice dwuwymiarową. |
|
Gabes |
» 2012-11-05 14:15:45 #include <SFML/Graphics.hpp> using namespace sf; int mapa[ 3 ][ 4 ] = { { 1, 1, 1, 1 }, { 1, 0, 0, 1 }, { 1, 1, 1, 1 } };
int szer = 60, wys = 60; int main() { Image obrazek; obrazek.LoadFromFile( "tlo.png" ); Sprite sprajt1; sprajt1.SetImage( obrazek ); RenderWindow aplikacja( VideoMode( 800, 600, 32 ), "Mapa" ); aplikacja.SetFramerateLimit( 60 ); while( aplikacja.IsOpened() ) { Event zdarzenie; while( aplikacja.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == Event::Closed ) aplikacja.Close(); } aplikacja.Clear( Color( 160, 160, 160 ) ); for( int y = 0; y < 3; y++ ) { for( int x = 0; x < 4; x++ ) { if( mapa[ y ][ x ] == 1 ) sprajt1.SetPosition( szer * x, wys * y ); aplikacja.Draw( sprajt1 ); } } aplikacja.Display(); } return 0; } |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2012-11-05 17:39:17 Dzięki właśnie o to mi chodziło.A i co oznacza ta szerokość równa 60?
|
|
Gabes |
» 2012-11-05 17:45:05 //szerokość i wysokość kafla int szer = 60, wys = 60; to szerokość i wysokość obrazka "tlo.png" to tylko przykładowe wymiary. |
|
m4tx |
» 2012-11-05 17:45:26 Um... Śmiem twierdzić na podstawie komentarzy w kodzie, iż jest to szerokość pojedynczego kafla... :P Czegoś nie rozumiesz jeszcze?
EDIT: Oj, widzę że mnie Gabes uprzedził :) |
|
« 1 » 2 3 |