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 - SilverTES

Pages: [1]
1
Fenêtrage / PB Keyboard vs Joystick latence !
« le: Décembre 04, 2016, 11:53:43 am »
Bonjour,
je voulais tester quelque chose qui semble assez problématique dans les bibliothèques que j'utilise (Allegro5 et SFML).

Je voulais voir si y a bien un problème de latence dans les entrée joystick/gamepad, j'ai écris ce petit bout de code, pour tester la différence de réactivité entre les touches du clavier et les boutons du joystick :
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
#include <iostream>
#include <vector>

int main()
{
    sf::RenderWindow winRender(sf::VideoMode(1280,720), "Input TEST");
    sf::View view(winRender.getDefaultView());
    winRender.setMouseCursorVisible(true);

    if (sf::Joystick::isConnected(0))
    {
        std::cout << " Gamapad 0 connected ! \n";

        unsigned int nbButton = sf::Joystick::getButtonCount(0);

        std::cout << " nb Buttons : " << nbButton << " \n";

        if (sf::Joystick::hasAxis(0, sf::Joystick::Z))
            std::cout << " Has Z axis ! \n" ;
    }

    winRender.setFramerateLimit(60);

    struct Player
    {
        float _px;
        float _py;
        float _radius;
        float _speed;
        sf::Color _color;
        sf::CircleShape _circle;

        Player(float px, float py, float radius, float speed, sf::Color color):
            _px(px),
            _py(py),
            _radius(radius),
            _speed(speed),
            _color(color)
        {
            _circle.setPosition(_px,_py);
            _circle.setRadius(_radius);
            _circle.setOrigin(_radius,_radius);
            _circle.setFillColor(_color);
            _circle.setOutlineThickness(2);
            _circle.setOutlineColor(sf::Color(255,255,0));
        }
        void update(float px, float py)
        {
            _px = px;
            _py = py;
            _circle.setPosition(_px,_py);
        }
        void draw(sf::RenderWindow * renderWindow)
        {
            renderWindow->draw(_circle);
        }
        void move(float vx, float vy)
        {
            _px += vx * _speed;
            _py += vy * _speed;
            if (_px < 0)    _px = 0;
            if (_px > 1280) _px = 1280;
            if (_py < 0)    _py = 0;
            if (_py > 720)  _py = 720;
        }
    };

    std::vector<Player> vecPlayer;

    vecPlayer.push_back(Player(640,360,32,4,sf::Color(255,20,10)));
    vecPlayer.push_back(Player(640,360,32,4,sf::Color(55,220,10)));

    while (winRender.isOpen())
    {
//        sf::Event event;
//
//        while (winRender.pollEvent(event))
//        {
//            if (event.type == sf::Event::Closed)
//                winRender.close();
//
//            if ((event.type == sf::Event::KeyPressed) && (event.key.code == sf::Keyboard::Escape))
//                winRender.close();
//        }
    // Update
        sf::Joystick::update();
        // GamePAD input !
        float joyX = sf::Joystick::getAxisPosition(0, sf::Joystick::PovX);
        float joyY = sf::Joystick::getAxisPosition(0, sf::Joystick::PovY);

        if (joyX > 10) vecPlayer[0].move( 1, 0); // RIGHT
        if (joyX <-10) vecPlayer[0].move(-1, 0); // LEFT
        if (joyY > 10) vecPlayer[0].move( 0,-1); // UP
        if (joyY <-10) vecPlayer[0].move( 0, 1); // DOWN

        // KeyBoard Input !
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))    vecPlayer[1].move( 0, -1);
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))  vecPlayer[1].move( 0,  1);
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))  vecPlayer[1].move(-1,  0);
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) vecPlayer[1].move( 1,  0);

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
            winRender.close();

        //std::cout << x << "\n";
        for (unsigned i(0); i<vecPlayer.size(); i++)
        {
            vecPlayer[i].update(vecPlayer[i]._px, vecPlayer[i]._py);
        }

    // Render

        winRender.clear();

        for (unsigned i(0); i<vecPlayer.size(); i++)
        {
            vecPlayer[i].draw(&winRender);
        }

        winRender.display();
    }

    vecPlayer.clear();
    return 0;
}

 

Pour ce faire j’utilise le petit soft "joyToKey": http://joytokey.net/en/download pour simuler la frappe sur le clavier afin de tester la synchro avec les boutons du Gamepad.

Il s'avère qu'il existe bien une différence de réactivité entre les 2 périphériques, ce qui est assez gênant si on veux faire un gameplay assez nerveux !

Vous pouvez tester de votre côté, on vois que les 2 cercles se désynchronise petit à petit quand je fais bouger avec la manette et "joyTokey" parametré avec les touches direction du clavier.



2
Général / PB CodeBlocks : smart pointer->code completion !
« le: Novembre 19, 2016, 09:57:20 pm »
Je ne sais pas si vous avez remarqué , quand on utilise les smart pointer dans CodeBlocks , l'auto complétion ne fonctionne pas mais ça marche toujours avec les raw pointers à la C et pas avec les unique_ptr,  shared_ptr, etc.

J'ai fais des recherches, mais je n'ai pas trouver de réponses très satisfaisante, moi qui comptais les utiliser plus souvent qu'avant.
J'ai testé avec Visual Studio ça marche y a pas de soucis, mais pas sous codeBlocks qui reste mon IDE de choix (léger, rapide et assez stable).


3
Bonjour,

Voila ayant recompiler correctement la SFML 2.4.0 (cmake etc) je voulais tester un programme simple, la compilation marche nickel mais lors de l’exécution j'ai directe une erreur, comme quoi il manque une dll :

libjpeg-62.dll

Serait-ce un oublie dans le package ou bien autre chose ? ou pourrait-on la trouver ?

Merci.

Pages: [1]