[SFML] Wychodzenie poza ściany oraz pisanie w oknie gui.
Ostatnio zmodyfikowano 2014-07-31 15:48
Avenon Temat założony przez niniejszego użytkownika |
» 2014-07-31 15:23:08 #include <SFML/Graphics.hpp> #include <iostream> #include <cstdlib> #include <ctime> #include <string> int main() { sf::ContextSettings settings; settings.antialiasingLevel = 8; sf::RenderWindow oknoAplikacji( sf::VideoMode( 640, 480, 32 ), "Gromak games v1.0" ); sf::Texture ludzik1; ludzik1.loadFromFile( "index2.psd" ); sf::Sprite ludzik; ludzik.setTexture( ludzik1 ); sf::Texture potwor1; potwor1.loadFromFile( "indeks3.psd" ); sf::Sprite potwor; sf::Texture tlo1; tlo1.loadFromFile( "indeks4.jpg" ); sf::Sprite tlo; tlo.setTexture( tlo1 ); potwor.setTexture( potwor1 ); tlo.setScale( 1, 1 ); tlo.setPosition( 0, 0 ); ludzik.setScale( 0.5f, 0.5f ); ludzik.setOrigin( 0.5f, 0.5f ); ludzik.setPosition( 580, 360 ); potwor.setScale( 0.5f, 0.5f ); potwor.setOrigin( 0.5f, 0.5f ); potwor.setPosition( 10, 10 ); sf::Font font; font.loadFromFile( "arial.ttf" ); sf::Text text; text.setFont( font ); text.setString( "aaa " ); text.setCharacterSize( 4 ); text.setColor( sf::Color::Red ); text.setStyle( sf::Text::Bold | sf::Text::Underlined ); text.setPosition( 100, 100 ); while( oknoAplikacji.isOpen() ) { sf::Event zdarzenie; while( oknoAplikacji.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) oknoAplikacji.close(); } oknoAplikacji.draw( text ); oknoAplikacji.draw( tlo ); oknoAplikacji.draw( ludzik ); oknoAplikacji.draw( potwor ); oknoAplikacji.display(); int g = ludzik.getPosition().x; int h = ludzik.getPosition().y; int j = potwor.getPosition().x; int k = potwor.getPosition().y; int o = potwor.getPosition().y; int p = potwor.getPosition().x; sf::FloatRect boundingBox = ludzik.getGlobalBounds(); sf::FloatRect otherBox = potwor.getGlobalBounds(); if( boundingBox.intersects( otherBox ) ) { ludzik.setPosition( 580, 360 ); potwor.setPosition( 10, 10 ); } Tu wiadomo co jest if( sf::Keyboard::isKeyPressed( sf::Keyboard::W ) ) { ludzik.move( 0, - 0.2 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::S ) ) { ludzik.move( 0, 0.2 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::A ) ) { ludzik.move( - 0.2, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::D ) ) { ludzik.move( 0.2, 0 ); } if( ludzik.getPosition().x > potwor.getPosition().x ) do Tutaj kod sprawiajacy ze potwor podaza za nami dopoki jego kordy nie beda rowne kordom ludzika { potwor.move( 0.12f, 0 ); } while( ludzik.getPosition().x == potwor.getPosition().x ); if( ludzik.getPosition().y > potwor.getPosition().y ) do { potwor.move( 0, 0.12f ); } while( ludzik.getPosition().y == potwor.getPosition().y ); if( ludzik.getPosition().y < potwor.getPosition().y ) do { potwor.move( 0, - 0.12f ); } while( ludzik.getPosition().y == potwor.getPosition().y ); if( ludzik.getPosition().x < potwor.getPosition().x ) do { potwor.move( - 0.12f, 0 ); } while( ludzik.getPosition().x == potwor.getPosition().x ); if( sf::Keyboard::isKeyPressed( sf::Keyboard::R ) ) { ludzik.rotate( 0.2 ); } Mechanizm nie pozwalajacy wyjsc poza plansze if( ludzik.getPosition().x <= 600 && ludzik.getPosition().y <= 0 ) { ludzik.setPosition( g, h ); } if( ludzik.getPosition().x <= 0 && ludzik.getPosition().y <= 440 ) { ludzik.setPosition( g, h ); } if( ludzik.getPosition().x >= 600 && ludzik.getPosition().y >= 0 ) { ludzik.setPosition( g, h ); } if( ludzik.getPosition().x >= 0 && ludzik.getPosition().y >= 383 ) { ludzik.setPosition( g, h ); } Tu mechanizm nie pozwalajacy wyjsc poza plansze if( potwor.getPosition().x <= 600 && potwor.getPosition().y <= 0 ) { potwor.setPosition( j, k ); } if( potwor.getPosition().x <= 0 && potwor.getPosition().y <= 440 ) { potwor.setPosition( j, k ); } if( potwor.getPosition().x >= 600 && potwor.getPosition().y >= 0 ) { potwor.setPosition( j, k ); } if( potwor.getPosition().x >= 0 && potwor.getPosition().y >= 440 ) { potwor.setPosition( j, k ); } } return 0; }
Ucze sie sfmlu jeden dzien więc krytyke zostawcie dla siebie ale możecie rzucić jakies porady co w tym kodzie mozna zrobić smuklej, lepiej, inaczej. No więc mówcie co gdzie jest źle. @pekfos ~Taki sens że gdyby każdy miał szukać w dokumentacji swoich zagadnień to by ludzion czasu zabrakło. |
|
pekfos |
» 2014-07-31 15:39:35 text.setCharacterSize( 4 );
|
4 piksele? oknoAplikacji.draw( text ); oknoAplikacji.draw( tlo );
|
Zasłaniasz tłem. Wszystko rysujesz na tekście. Taki sens że gdyby każdy miał szukać w dokumentacji swoich zagadnień to by ludzion czasu zabrakło. |
Gdyby każdy to robił, to nie traciłby tyle czasu i nie było by wielu niepotrzebnych pytań na forach. |
|
Avenon Temat założony przez niniejszego użytkownika |
» 2014-07-31 15:44:55 Poprawiłem, ustawiłem piksele na 240 i nadal nie działa. EDIT: Działa, problemem było złe miejsce wklejenia arial.ttf Dobra, teraz kolejna sprawa, jak zrobić aby gdy if( boundingBox.intersects( otherBox ) ) { To zmniejsz napis( czyli np ilosc zycia ludzika ) od 100 do 0 w odpowiednim tempie ? }
|
|
pekfos |
» 2014-07-31 15:48:34 Problem rozwiązany, temat do zamknięcia. |
|
1 2 « 3 » |