IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

EasingCurve pour simuler une gravité ?

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut EasingCurve pour simuler une gravité ?
    Bonsoir à tous !

    Je suis actuellement en train de travailler sur un projet mélangeant Kinect, C++ et Qt, et je sèche un peu !
    Mon objectif ? Créer un jeu de jongle. Je n'ai pas encore réalisé la partie KINECT. Je suis Qt Creator mac.

    Grâce à la doc, j'ai réussi à m'en sortir malgré le fait que je débute en C++, mais actuellement je galère pour animer mon QGraphicsPixmapItem qui représente ma balle.

    En effet mon idée était la suivante, je pensais utiliser le EasingCurve en mode OutBounce pour simuler la chute de ma balle et utiliser la méthode renvoyant un booléen pour relancer une autre trajectoire lorsque la balle touche mon autre PixmapItem qui représente une tête et ainsi de suite.

    J'ai réussi à implémenter le OutBounce mais il ne répond pas vraiment à mon attente, le rebond est fait en fonction d'un QPointF représentant la position finale de ma balle, et pas les bords de mon QGraphicsScene, comme je l'aurais voulu.

    J'aimerais savoir si je m'embête pour rien, ou si justement je dois creuser dans la voie du OutBounce. J'ai pensé à dissocier un déplacement en x et un autre en y avec 2 trajectoires différentes mais je ne suis sûr de rien.

    Un avis sur la question ?

    Voici mon code:

    Ballon.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #ifndef BALLON_H
    #define BALLON_H
     
     
    #include <QLabel>
    #include <QGraphicsPixmapItem>
    #include <QPropertyAnimation>
     
    class Ballon:public QObject,public  QGraphicsPixmapItem //double héritages
    {
    Q_OBJECT
    Q_PROPERTY(QPointF pos READ pos WRITE setPos)
     
     
    public:
        Ballon(); //constructeur
     
     
     
    private:
     
        QPropertyAnimation animation;
    };
     
    #endif // BALLON_H
    Mon ballon.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "ballon.h"
     
     
    #include <QPropertyAnimation>
     
    Ballon::Ballon() : QGraphicsPixmapItem()
    {
        setPixmap(QPixmap(":/new/prefix1/ballon.png"));
     
     
    this->setPos(300,0);
    }
    et enfin mon main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include <QApplication>
    #include <Tete.h>
    #include <ballon.h>
    #include <QtGui>
    #include <fenetre.h>
    #include <QPropertyAnimation>
     
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);// démarrage de l'application Qt
     
     
        Fenetre fond(0,0,800,600);//création de la scène, objet de type Graphicscene
        Tete tete; //création de la tête
    Ballon ballon; //Création du ballon
     
    fond.addItem(&tete);
    fond.addItem(&ballon);
     
    QPointF destination;
    destination.setX(500);
    destination.setY(520);
     
     
     
    QPropertyAnimation *animation = new QPropertyAnimation(&ballon,"pos");
    animation->setEasingCurve(QEasingCurve::OutBounce);
    animation->setDuration(4000);
    animation->setEndValue(destination);
     
    animation->start();
     
     
        QGraphicsView view(&fond); // création de la visualisation de la scène
        view.show(); //affichage de la visualisation de la scène
     
     
        return app.exec();
    Et mon projet sur Git https://github.com/PierreZ/Jeux-de-Jongles

    Je dis merci d'avance à toute les personnes qui voudront bien m'aider !
    Pierre

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Salut,

    Je ne pense pas que les "ease curve" ont été pensées pour cet usage.
    Il s'agit simplement d'animer le déplacement d'une fenêtre, d'un volet, etc...

    Dans ton cas, il vaudrait mieux utiliser une librairie de "simulation du monde réel" en quelque sorte. Dans laquelle tu définis tes objets, tes lois physiques et qui te recalcule à la demande la position de tout le monde.

    Par exemple : Box2D, http://box2d.org/

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Je me doute bien que les easing curve ne sont pas conçu pour cet usage, mais par manque de temps avant la remise du projet, je suis obligé de faire avec les moyens du bord, c'est-à-dire sans rajouter un moteur graphique... Je vais essayer de me débrouiller, je voulais savoir si il y avait un moyen simple de faire ce que je veux (qT a l'air vachement bien faite, j'espérais une implémentation facile de la gravité en fait ...)

    EDIT: Je pense pouvoir me débrouiller sans un moteur graphique, en effet j'ai juste besoin d'avoir une apparence de chute de balle lorsque la balle ne touche pas les bords de mon cadre, puisque je relancerais mon animation si elle touche le bord pour simuler le "rebond".

    Je m'appuie sur le sujet ici pour mettre un rebond sur mes Y et une autre courbe sur mes X mais je n'y arrive pas.

    Une idée ?

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Points : 398
    Points
    398
    Par défaut
    Ben tu peux aussi le faire à la main, le calcul de la position à partir d'une vitesse initiale, d'une position initiale et de la loi de gravitation n'est pas bien compliqué.

    Tu mets un timer toutes les 100 ms, tu recalcules et repositionne ton item.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Oui je pense que je vais le faire comme ça, ce sera plus interessant.
    Merci à vous et bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. idée pour simuler une validation d'item dans une listbox?
    Par punky_brooster dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/10/2010, 12h07
  2. [ctypes]Problème pour simuler une combinaison de touche avec ctypes
    Par Estudiante dans le forum Interfaçage autre langage
    Réponses: 0
    Dernier message: 29/09/2009, 17h46
  3. Utilisation de MACRO pour simuler une classe abstract.
    Par elraton dans le forum Débuter
    Réponses: 6
    Dernier message: 13/03/2009, 14h35
  4. Réponses: 4
    Dernier message: 02/03/2009, 17h18
  5. [Caml] Une liste pour simuler une pile
    Par Ubum dans le forum Caml
    Réponses: 1
    Dernier message: 27/06/2006, 23h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo