Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Utilisation Joystick  (Lu 2466 fois)

0 Membres et 1 Invité sur ce sujet

maxguigui

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Utilisation Joystick
« le: Août 09, 2014, 11:57:06 pm »
Bonsoir a tous !
Je rencontre un problème,ou plutôt un bug ^^
Apres un long périple pour installer la librairie,je m'attaque a son utilisation:j'inclus SFML/Window/Joystick.hpp,et utilise pour tester si le joystick est reconnu et si la librairie fonctionne la fonction sf::Joystick::isConnected(0) et là,boum,mon programme plante au moment de se lancer :(
Je commente,ça marche,je décommente,ça marche plus (donc c'est bien la ligne là qui fait planter ^^)
Quelqu'un a t-il une idée de quel pourrait être mon probleme ?
Merci d'avance pour votre aide ! :)
PS:j'utilise Qt,ce qui n'est pas une mince affaire avec SFML ^^

CINEfilHD77

  • Newbie
  • *
  • Messages: 38
    • Voir le profil
Re : Utilisation Joystick
« Réponse #1 le: Août 10, 2014, 12:58:34 am »
Déjà, n'inclus pas SFML/Window/Joystick.hpp, pas besoin :)
Pourrais-tu donner ton code entier ? (J'imagine qu'il est pas très long vu que tu dis que c'est pour tester, mais si il fait 5000 lignes, au pire entoure les balises de code par des balises de spoiler avant de poster)

maxguigui

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Utilisation Joystick
« Réponse #2 le: Août 10, 2014, 01:10:50 am »
Fenetreprincipale.cpp
#include "Fenetre_principale.h"
#include "moteurs.h"

FenetrePrincipale::FenetrePrincipale():QWidget()
{

    barre_de_menu=new QMenuBar();
    menu_programme=new QMenu("&Programme");
    menu_affichage=new QMenu("&Affichage");
    menu_options=new QMenu("&Options");
    barre_de_menu->addMenu(menu_programme);
    barre_de_menu->addMenu(menu_affichage);
    barre_de_menu->addMenu(menu_options);
    //actions programme
    QAction *actionQuitter = new QAction("&Quitter",menu_programme);
    actionQuitter->setShortcut(QKeySequence("Ctrl+Q"));
    connect(actionQuitter,SIGNAL(triggered()),qApp,SLOT(quit()));
    menu_programme->addAction(actionQuitter);
    //actions affichage
    afficher_compteurdevitesse=new QAction("&Compteur de vitesse",menu_affichage);
    afficher_compteurdevitesse->setCheckable(1);
    afficher_compteurdevitesse->setChecked(1);
    connect(afficher_compteurdevitesse,SIGNAL(triggered()),this,SLOT(affichage_compteur_vitesse()));
    menu_affichage->addAction(afficher_compteurdevitesse);
    afficher_horizonartificiel=new QAction("&Horizon artificiel",menu_affichage);
    afficher_horizonartificiel->setCheckable(1);
    afficher_horizonartificiel->setChecked(1);
    connect(afficher_horizonartificiel,SIGNAL(triggered()),this,SLOT(affichage_horizon_artificiel()));
    menu_affichage->addAction(afficher_horizonartificiel);
    afficher_moteurs=new QAction("&Moteurs",menu_affichage);
    afficher_moteurs->setCheckable(1);
    afficher_moteurs->setChecked(1);
    connect(afficher_moteurs,SIGNAL(triggered()),this,SLOT(affichage_moteurs()));
    menu_affichage->addAction(afficher_moteurs);

    //actions options

    barre_puissance_demandee=new QProgressBar();
    barre_puissance_demandee->setMinimum(-100);
    barre_puissance_demandee->setMaximum(100);
    barre_puissance_demandee->setOrientation(Qt::Vertical);
    barre_puissance_demandee->setValue(puissance_demandee);
    //barre_puissance_demandee->setTextVisible(1);

    avancer=new QShortcut(Qt::Key_Z,this);
    connect(avancer,SIGNAL(activated()),this,SLOT(action_avancer()));
    reculer=new QShortcut(Qt::Key_S,this);
    connect(reculer,SIGNAL(activated()),this,SLOT(action_reculer()));
    gauche=new QShortcut(Qt::Key_Q,this);
    connect(gauche,SIGNAL(activated()),this,SLOT(tourner_gauche()));
    droite=new QShortcut(Qt::Key_D,this);
    connect(droite,SIGNAL(activated()),this,SLOT(tourner_droite()));

    batterie=new QProgressBar();
    batterie->setMinimum(0);
    batterie->setMaximum(100);
    batterie->setOrientation(Qt::Horizontal);
    batterie->setValue(pourcentage_batterie);

    moteurs=new Moteurs();
    /*rafraichissement=new QTimer(this);
    rafraichissement->start(20);
    connect(rafraichissement,SIGNAL(timeout()),moteurs,SLOT(rafraichir(puissance_moteurdroit,puissance_moteurgauche,regime_moteurdroit,regime_moteurgauche)));*/


    moteurs->setPourcentagegauche(puissance_moteurgauche);
    moteurs->setPourcentagedroit(puissance_moteurdroit);
    moteurs->setRegimegauche(regime_moteurgauche);
    moteurs->setRegimedroit(regime_moteurdroit);

    organisation_principale=new QGridLayout(this);
    organisation_principale->addWidget(barre_puissance_demandee,1,0,Qt::AlignLeft);
    organisation_principale->addWidget(barre_de_menu,0,0,Qt::AlignTop);
    organisation_principale->addWidget(batterie,0,1,Qt::AlignRight);
    organisation_principale->addWidget(moteurs,1,1,Qt::AlignBottom);
    //sf::Joystick::update();
    if(sf::Joystick::isConnected(0))
    {
        puissance_demandee=100;
    }
}

void FenetrePrincipale::action_avancer()
{
   puissance_demandee ++;
   barre_puissance_demandee->setValue(puissance_demandee);

}
void FenetrePrincipale::action_reculer()
{
    puissance_demandee --;
    barre_puissance_demandee->setValue(puissance_demandee);
}

void FenetrePrincipale::tourner_gauche()
{
    puissance_moteurgauche=puissance_demandee-10;
}

void FenetrePrincipale::tourner_droite()
{
    puissance_moteurdroit=puissance_demandee-10;
}

void FenetrePrincipale::monter_camera()
{

}

void FenetrePrincipale::baisser_camera()
{

}

void FenetrePrincipale::gauche_camera()
{

}

void FenetrePrincipale::droite_camera()
{

}

void FenetrePrincipale::affichage_compteur_vitesse()
{
    if(afficher_compteurdevitesse->isChecked())
    {
        compteur_de_vitesse->setVisible(1);
    }
    else
    {
        compteur_de_vitesse->setHidden(1);
    }
}

void FenetrePrincipale::affichage_horizon_artificiel()
{
    if(afficher_horizonartificiel->isChecked())
    {
        horizon_artificiel->setVisible(1);
    }
    else
    {
        horizon_artificiel->setHidden(1);
    }
}

void FenetrePrincipale::affichage_moteurs()
{
    if(afficher_moteurs->isChecked())
    {
        moteurs->setVisible(1);
    }
    else
    {
        moteurs->setHidden(1);
    }
}
 

Fenetreprincipale.h
#ifndef FENETRE_PRINCIPALE_H
#define FENETRE_PRINCIPALE_H

#include <QMenu>
#include <QMenuBar>
#include <QGridLayout>
#include <QApplication>
#include <QProgressBar>
#include <QShortcut>
#include <QAction>
#include <QTimer>
#include "moteurs.h"
#include <SFML/Window/Joystick.hpp>


class FenetrePrincipale: public QWidget
{
    Q_OBJECT

public:
    FenetrePrincipale();


public slots:
    void action_avancer();
    void action_reculer();
    void tourner_gauche();
    void tourner_droite();
    void monter_camera();
    void baisser_camera();
    void gauche_camera();
    void droite_camera();
    void affichage_horizon_artificiel();
    void affichage_compteur_vitesse();
    void affichage_moteurs();

private:
    QMenuBar *barre_de_menu;
    QGridLayout *organisation_principale;
    QMenu *menu_affichage;
    QMenu *menu_options;
    QMenu *menu_programme;
    QGridLayout *organisation_instruments;
    QProgressBar *barre_puissance_demandee;
    QShortcut *avancer;
    QShortcut *reculer;
    QShortcut *gauche;
    QShortcut *droite;
    QWidget *compteur_de_vitesse;
    QWidget *horizon_artificiel;
    Moteurs *moteurs;
    QAction *afficher_compteurdevitesse;
    QAction *afficher_horizonartificiel;
    QAction *afficher_moteurs;
    QProgressBar *batterie;
    QTimer *rafraichissement;
    int puissance_demandee=0;
    int puissance_moteurgauche=100;
    int puissance_moteurdroit=100;
    int regime_moteurgauche=4000;
    int regime_moteurdroit=4000;
    int pourcentage_batterie=100;
};

#endif // FENETRE_PRINCIPALE_H
 

Bah si j'inclue pas la SFML,ça peut pas marcher ^^
D'ailleur si j'essaye sans inclure,il me met "sf"has not been declared here ;)
« Modifié: Août 10, 2014, 01:12:22 am par maxguigui »

victorlevasseur

  • Full Member
  • ***
  • Messages: 206
    • Voir le profil
Re : Utilisation Joystick
« Réponse #3 le: Août 10, 2014, 01:33:42 am »
Tu as bien compiler SFML avec le compilateur inclus avec Qt ? Tu ne mélanges pas les dlls debug et release de SFML ?

maxguigui

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Utilisation Joystick
« Réponse #4 le: Août 10, 2014, 01:47:31 am »
Euh,Nan j'ai pas compilé SFML avec MinGW parce que je comprends rien a ce qui faut faire ahah

EDIT:je pense avoir reussi a compiler SFML avec le tuto Github de Laurent Gomila et avoir reussi a la linker.
Mon code fonctionne maintenant avec les fonctions de la SFML sans planter,néanmoins,en connectant un joystick,ma boucle:
if(sf::Joystick::isConnected(0))
    {
        puissance_demandee=100;
    }
ne fonctionne toujours pas ...
« Modifié: Août 10, 2014, 11:30:44 am par maxguigui »

CINEfilHD77

  • Newbie
  • *
  • Messages: 38
    • Voir le profil
Re : Utilisation Joystick
« Réponse #5 le: Août 12, 2014, 05:10:28 pm »
Il est peut-être pas dans l'emplacement 0. Je sais pas trop comment la SFML gère les Joysticks, si chacun se "range" dans l'ordre à partir de 0... Mais essaie une boucle genre ça :

for (int i = 0; i < 7; i++)
{
   if (sf::Joystick::isConnected( i ))
   {
      puissance_demandee=100;
      break;
   }
}

Et puis après la boucle, si un Joystick a été trouvé, bah tu stockes son index si t'en as besoin.
Mais je sais pas comment la SFML repère les Joystick, donc je te garantie pas que ça donnera du nouveau. :)

maxguigui

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Utilisation Joystick
« Réponse #6 le: Août 12, 2014, 11:24:12 pm »
Non c'est bon la SFML fonctionne,et c'est bien l'emplacement 0,j'avais juste oublié le bout de code qui faisait le setValue dans la QProgressBar,donc ça n'affichait pas la valeur,le joystick marche niquel ^^
J'ai eu du mal à installer,mais c'est un bonheur maintenant ^^