[C++][SFML] Skok postaci w bok
Ostatnio zmodyfikowano 2014-11-08 13:38
arczi14 Temat założony przez niniejszego użytkownika |
[C++][SFML] Skok postaci w bok » 2014-11-08 13:32:52 Witam, Bawię się fizyką w świecie 2D. Więc postanowiłem odtworzyć skok odpowiadający skoku z świata rzeczywistego tzn z przyśpieszeniem grawitacyjnym itp. (na razie bez oporu powietrza). Udało mi się napisać skok w górę. Niestety skoku w bok(tzn żeby poruszał się parabolicznie po osi X) nie mam pojęcia w jaki sposób mógłbym to napisać. Mam wykorzystać rzut poziomy albo coś takiego czy w jaki sposób można to rozwiązać ? Przy okazji podaje kod na skok w góre do oceny, a może się komuś przyda :) O ile kod jest w ogóle dobry. :p #include <SFML/Graphics.hpp>
using namespace std;
class Data { public: float jumpF = 40; float gravityAcceleration = 9.8; };
class PhysicalCharacteristics { public: float mass = 5; float speedValue = 0; float speedAngel = 0; float accelerationValue = 0; float accelerationAngel = 0; };
class Player : public PhysicalCharacteristics { public: sf::RectangleShape playerSprite; Player() { playerSprite.setSize( sf::Vector2f( 50, 50 ) ); playerSprite.setFillColor( sf::Color::Red ); playerSprite.setPosition( 512 - 25, 550 ); } void jump( float deltaTime ) { Data date; speedValue -= date.gravityAcceleration * deltaTime; playerSprite.move( 0, - speedValue ); } };
class Ball { };
int main() { Player gracz; sf::Clock delta; float deltaTime; bool whileJump = false; Data dat; sf::RenderWindow WindowApp( sf::VideoMode( 1024, 600 ), "Symulacja odbicia pilki" ); WindowApp.setVerticalSyncEnabled( true ); while( WindowApp.isOpen() ) { deltaTime = delta.restart().asSeconds(); sf::Event event; while( WindowApp.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) WindowApp.close(); if( event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space ) { gracz.speedValue = dat.jumpF / gracz.mass; whileJump = true; } } if( whileJump ) { gracz.jump( deltaTime ); if( gracz.playerSprite.getPosition().y > 550 ) { gracz.playerSprite.setPosition( gracz.playerSprite.getPosition().x, 550 ); whileJump = false; gracz.accelerationValue = 0; } } WindowApp.clear(); WindowApp.draw( gracz.playerSprite ); WindowApp.display(); } return EXIT_SUCCESS; }
|
|
arczi14 Temat założony przez niniejszego użytkownika |
» 2014-11-08 13:38:15 Przepraszam za za niepotrzebny spam. Dodałem po prostu: if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) ) { gracz.playerSprite.move( 100 * deltaTime, 0 ); }
if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) ) { gracz.playerSprite.move( - 100 * deltaTime, 0 ); }
I działa. |
|
« 1 » |