Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Sujets - TheArrow

Pages: [1]
1
Général / Physique de saut
« le: Avril 07, 2016, 11:58:51 am »
Salut à tous, je viens vers vous car comme mon titre l'indique j'ai un soucis avec la physique d'un saut 2D.
J'aime bien comprendre quand j'utilise quelques choses donc j'ai commencé à me remémorer mes cours sur la loi de newton.

https://www.kartable.fr/terminale-s/physique-chimie/specifique/chapitres-33/applications-des-lois-de-newton/cours/applications-des-lois-de-newton/22620

Dans ce cours, pour les équations horaires du mouvement on obtient ce système :

OG⎯→{ x(t)=0
          {  y(t)=v0⋅cos(α)⋅t
          { z(t)=−12⋅g⋅t2+v0⋅sin(α)⋅t


Dans le jeu la fonction y(t) correspond à l'axe x et z(t) correspond à l'axe y.
J'ai donc simuler un petit saut, voici le code:

void Game::play()
{
        gState = GAME_STATE::G_RUNNING;
       
        Map map;
        map.load(".\\Data\\Map\\level.map", "tile");

        Character player(sf::Vector2f(0, 0), "player");
        player.setCenter();

        int v_init = 2;
        int angle_init = Utils::pi / 3;
        float t = 0;


        while (getWindow().isOpen() && gState == GAME_STATE::G_RUNNING)
        {
                sf::Event event;
                while (getWindow().pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                                getWindow().close();
                }

                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                {
                        gState = GAME_STATE::G_PAUSED;
                        break;
                }
                if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                {
                        getView().move(3, 0);
                }

                sf::Vector2f jump;

                jump.x = cos(angle_init) * v_init * t;
                jump.y = -0.5 * Utils::g*pow(t, 2) + v_init*sin(angle_init)*t;

                getView().move(jump);
                t += 0.001;


                getWindow().clear(sf::Color::Black);

                getWindow().setView(getView());
                getWindow().draw(map);

                getWindow().setView(getWindow().getDefaultView());
                getWindow().draw(player);

                getWindow().display();
        }
}

Le soucis c'est que mon personnage monte bien mais il ne redescend jamais ou alors il redescendra dans quelques décennie.

Je ne vois pas trop d'ou peut venir ce soucis, j'ai mis l'incrémentation de t avec des valeurs très petite pour avoir le temps de bien voir la trajectoire.

Si quelqu'un pourrait m'aiguiller sur ce sujet, merci d'avance !

2
Fenêtrage / Étrange soucis avec la vue
« le: Avril 06, 2016, 09:37:43 pm »
Salut à tous, je suis nouveau sur ce forum.

Je connais SFML depuis quelques temps et là j'ai décidé de m'y lancer à nouveau.
Je fais un petit jeu 2D et j'utilise donc la classe View pour déplacer ma map.

Le soucis que je rencontre est assez étrange, lorsque l'utilisateur appuie sur la flèche droite du clavier la vue se déplace de 3 sur l'axe X mais ce déplacement est accélérer lorsque je déplace ma souris dans la fenêtre.

Pourtant à aucun moment dans mes événements j'utilise le déplacement de la souris pour faire quoi que ce soit.

Voici le code en question:

void Game::play()
{
        gState = GAME_STATE::G_RUNNING;
       
        Map map;
        map.load(".\\Data\\Map\\level.map", "tile");

        Character player(sf::Vector2f(0, 0), "player");
        player.setCenter();

        while (getWindow().isOpen() && gState == GAME_STATE::G_RUNNING)
        {
                sf::Event event;
                while (getWindow().pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                                getWindow().close();

                        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
                        {
                                gState = GAME_STATE::G_PAUSED;
                                break;
                        }
                       
                        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
                        {
                                getView().move(3, 0);
                        }
                }

                getWindow().clear(sf::Color::Black);

                getWindow().setView(getView());
                getWindow().draw(map);

                getWindow().setView(getWindow().getDefaultView());
                getWindow().draw(player);

                getWindow().display();
        }
}

Si quelqu'un souhaite voir le soucis je peux envoyer l’exécutable.

Pages: [1]
anything