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

Auteur Sujet: [Résolu] Fonctionnement avec Qt  (Lu 4511 fois)

0 Membres et 1 Invité sur ce sujet

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
[Résolu] Fonctionnement avec Qt
« le: Mars 27, 2012, 08:06:22 pm »
Bonjour,
Pour mon projet, je suis obligé d'utiliser Qt avec la SFML, donc j'ai un petit problème niveau adaptation avec Qt des événements de la SFML.
Donc, j'explique rapidement:
La SFML avec ses boucles freeze Qt, je préfère le fonctionnement de la SFML a celui de Qt, mais bon.
Avant, le jeu fonctionnait avec des threads, donc les 2 pouvaient tourner en même temps, mais sous Linux ça passe assez bien mais sous Windows le jeu rame au point que c'est impossible de jouer avec cette technique (et ne rame pas si on vire les threads).
Bref, on m'as conseillé d'intégrer la SFML a Qt, comme le montre votre tutoriel, ça fonctionne très bien pas de problèmes la dessus.
Seulement, étant donné que l'on ne peut pas utiliser de boucles, l'on est obligé de tout déclarer en "global" vu que ce sont des variables dans l'objet (attributs), déjà ce point là, je le trouve embêtant, j'avais beaucoup de données qui étaient crée avec des fonctions, et qui étaient automatiquement supprimées a leurs fermetures.

Et maintenant, je prends un exemple simple:
Avant j'avais un menu, et quand le joueur lançait une map, ça lançait simplement une fonction, les boucles permettaient de rester sur le jeu, et quitter la fonction retournait au menu.

Maintenant, j'ai rien trouvé d'autre que d'utiliser une variable qui en fonction de sa valeur change ce qui doit être appelé (dans la fonction onInit() de l'objet), c'est vraiment pas pratique, surtout qu'il faut faire une fonction d’initialisation, alors qu'avant ça se faisait dans la même fonction, et il faut rajouter une fonction pour s'amuser a détruire toutes les données de la fonction qui sont stockées en attributs, c'est vraiment pas pratique.

Ensuite, je prends un autre exemple:
Je crée un RPG, je veux démarrer un combat, bon, bah, pas de problèmes, dans mon esprit, si il n'y a que la SFML, je lance une fonction qui contient une boucle, enfin vous voyez, et le problème est réglé, c'est très simple.

Seulement avec Qt, je suis de nouveau obligé de passer par des trucs en attributs au lieu d'utiliser les paramètres de fonctions (Qt freeze si on utilise une boucle pour la SFML).

Donc, ma question: Comment faire pour retrouver la simplicité qu'on avait avec la SFML seule, en utilisant Qt, sans se trimbaler des tonnes d'attributs d'objets a la place de paramètres de fonctions?
Ou comment placer une boucle la dedans sans que Qt Freeze?
Merci :)
« Modifié: Mars 27, 2012, 11:01:28 pm par Crone123 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Fonctionnement avec Qt
« Réponse #1 le: Mars 27, 2012, 08:14:42 pm »
Tu t'y prenais mal avec SFML, du coup il est normal que ça n'aille plus avec Qt. Mettre des boucles partout c'est mal, il n'en faut qu'une centrale.

En codant bien, la façon de gérer la logique haut-niveau ne devrait rien changer au reste de ton code. En gros, avec SFML tu avais une boucle principale qui faisait (en gros) {events; update; draw}. Avec Qt c'est pareil sauf que ce n'est pas toi qui gère la boucle, mais tu retrouves facilement un moyen de gérer {events; update; draw}, comme c'est plus ou moins le cas dans le tutoriel.
Laurent Gomila - SFML developer

Crone123

  • Full Member
  • ***
  • Messages: 141
    • Voir le profil
Re : Fonctionnement avec Qt
« Réponse #2 le: Mars 27, 2012, 11:00:38 pm »
OK, je comprends maintenant alors :)
Donc quand je code en C++ avec la SFML je fais comme je faisais avec Game Develop (je sais pas si vous connaissez), un très bon logiciel de développement de jeux en 2D sans programmation qui utilise la SFML justement (c'est pour ça que je me suis tourné vers la SFML quand j'ai appris a programmer :) ).
Erreur de débutant donc, je vais ré-arranger tout ça :)
Merci beaucoup pour cette réponse rapide :D