R0ut4 Temat założony przez niniejszego użytkownika |
SFML C++ Zapisanie pozycji gracza » 2019-07-09 14:47:54 Witam, ma ktoś może pomysł jak mógłbym zapisać pozycje gracza w zmiennej, żebym potem mógł wykorzystać ja w pętli? Nie wiem czy zrozumile, więc "tłumaczeni": stara_pozycja zapisuje aktualną pozycję i potem jeśli nowa pozycja jest równa starej pozycji + 20 to wykonaj blebleble... |
|
pekfos |
» 2019-07-09 18:25:12 Nie znajduję słów. Zrób dokładnie tak, jak napisałeś. Nie mam pojęcia, co Cię powstrzymuje.. |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-07-09 20:20:57 Próbowałem, ale. To chyba zwracana nadal aktualna pozycja... W każdym razie próbowałem i lipa |
|
pekfos |
» 2019-07-09 22:16:00 Podaj kod, z którym jest problem. |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-07-10 08:18:34 Od komentarza ten if jest problem, ale to nie trudno się domyślić... #include <SFML/Window.hpp> #include <SFML/Graphics.hpp>
void setPosition( float x, float y ); void move( float X, float Y );
int main() { sf::RenderWindow okno( sf::VideoMode( 800, 700, 32 ), "Platformowka" ); okno.setFramerateLimit( 30 ); sf::Texture tekstura_tlo; sf::Texture tekstura_podloga; sf::Texture tekstura_postac; tekstura_tlo.loadFromFile( "tlo.png" ); tekstura_podloga.loadFromFile( "podloga.png" ); tekstura_postac.loadFromFile( "postac.png" ); sf::Sprite tlo; sf::Sprite podloga; sf::Sprite postac; tlo.setTexture( tekstura_tlo ); podloga.setTexture( tekstura_podloga ); postac.setTexture( tekstura_postac ); postac.setPosition( 5, 603 ); while( okno.isOpen() ) { sf::Event zdarzenie; if( okno.pollEvent( zdarzenie ) ) { if( zdarzenie.type == sf::Event::Closed ) { okno.close(); } } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { postac.move( 5, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { postac.move( - 5, 0 ); } if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { if( postac.getPosition().y - 20 == postac.getPosition().y ) { postac.move( 0, + 20 ); } else { postac.move( 0, - 20 ); } } okno.clear(); okno.draw( tlo ); okno.draw( podloga ); podloga.setPosition( 0, 650 ); okno.draw( postac ); okno.display(); } return 0; }
|
|
Jacob99 |
» 2019-07-10 09:05:26 Ten warunek jest zawsze fałszywy, bo nie porównujesz poprzedniej pozycji gracza z aktualną, tylko (aktualną - 20) z aktualną. Musisz sobie stworzyć (gdzieś przed pętlą) zmienną pomocniczą sf::Vector2f lastPosition , którą będziesz przypisywał w tym if-ie. sf::Vector2f lastPosition
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) ) { if( lastPosition.y - 20 == postac.getPosition().y ) { postac.move( 0, + 20 ); } else { postac.move( 0, - 20 ); } lastPosition = postac.getPosition(); }
|
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2019-07-10 11:56:38 Jeśli wysłałeś mi kod źródłowy, który powinien działać, to mam złe wieści... Chyba, ż to tylko przykład i na takiej zasadzie mam to zrobić |
|
sppmacd |
» 2019-07-10 15:49:19 |
|
« 1 » 2 |