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.


Messages - lepiaff

Pages: [1]
1
Système / Re : sf::Clock et nullptr
« le: Août 10, 2014, 12:20:55 am »
m_isPaused au moment de l'erreur : Cannot access memory at address 0x28.
Je ne comprend pas.

Bon, bin sujet clos, ça n'a pas de rapport avec SFML ^^'.

Merci encore, à bientot  :).

2
Système / Re : sf::Clock et nullptr
« le: Août 09, 2014, 11:37:53 pm »
Oki merci pour l'information, je vais essayer le pointeur intelligent :).

Pour le debogueur, j'essaye depuis tout à l'heure, mais a part me dire segfault quand j'arrive à la ligne en question...
Je vais refaire une passe sur le code alors.
Merci

3
Système / Re : sf::Clock et nullptr
« le: Août 09, 2014, 09:11:59 pm »
Citer
Et le constructeur par copie ? L'opérateur d'affectation ? Le fait est que même si tu as besoin d'allocation dynamique, il n'y a pas de raison de ne pas au moins encapsuler ton pointeur dans un pointeur intelligent (unique_ptr, shared_ptr, ...).
Etant donné que mes connaissances en la matière sont encore limités, je vais écouter tes conseilles. J'ai lu quelque part que le pointeur intelligent de boost corrige une faille du pointeur intelligent de la bibliothèque standard. Que me conseilles-tu sachant que je n'ai pas encore boost et que c'est une grosse bibliothèque pour de si petits projets ?

Bon le problème initial existe toujours... je poste mon code :

Ma classe Horloge :
(click to show/hide)

Ma classe Animation :
(click to show/hide)

Le programme compile, se lance puis Segfault à la ligne
if(m_isPaused)

Ce ne serait pas que le type int n'est pas adapté à la taille d'un getElapsedTime().asMilliseconds() ?
Je sent que la solution va seulement démontrer que je suis un boulet ^^'.

4
Système / Re : sf::Clock et nullptr
« le: Août 09, 2014, 07:57:20 pm »
Citer
La gestion de la mémoire manuelle (new/delete) doit de manière général être évitée car c'est une source d'erreur potentielle. Il y a toujours une meilleure alternative, en l'occurence ici ne pas l'utiliser du tout :)
Même dans ce genre de cas ou le risque d'erreur est très limité ? En effet, ici l'objet alloué dynamiquement n'est pas pointé par un autre objet. Je n'ai qu'un pointeur, je le créé avec start(), je le delete avec stop() et si il existe, je le détruit dans le destructeur.

Citer
sf::Clock ne "tourne" pas comme le ferait une vraie horloge physique. Quand tu fais start() elle récupère le temps absolu courant, et quand tu fais getElapsedTime() elle fait pareil et effectue la différence entre les deux temps. Entre les deux appels, il ne se passe strictement rien ;)
Bon bin vendu alors ! :). Merci pour l'explication, je vais de ce pas modifier ça.

5
Système / Re : sf::Clock et nullptr
« le: Août 09, 2014, 05:04:51 pm »
Citer
Et à quel moment est-ce que tu assignes autre chose qu'un pointeur nul à cette variable ?
Tout simplement dans la méthode void cHorloge::start() elle même appelée par cAnimation.play(). Si j'ai bien compris, le seul fait de créer le sf::Clock lance l'horloge, donc ça fait juste ce qu'il me faut.

Citer
Personnellement j'ajouterais un booléen m_isPaused et je garderai un sf::Clock simple, sans pointeur ni allocation dynamique.

Oui, j'y ai pensé, mais je me suis dit que laisser tourner le sf::Clock alors qu'on ne l'utilise pas, et ça, sur chaque entité qui possède une animation n'est pas une bonne idée. Tu l'auras compris, mon exemple fait référence à un jeu. Des personnages qui ne bougent pas en permanence, qui n'attaquent pas en permanence, un coffre qui peut être ouvert, etc. Vu qu'il pourrait y avoir un grand nombre d'entités de ce style en mémoire, j'ai pensé qu'il serait plus intéressant d’effacer l'horloge pour la recréer lorsque l'on en a besoin.

Peux-tu m'expliquer pourquoi ce n'est pas réellement une bonne chose ?

Merci :).

6
Système / Re : sf::Clock et nullptr
« le: Août 09, 2014, 03:40:56 pm »
Dans le constructeur je fais simplement :
m_horloge = nullptr;

La raison obscure est simple (dans mon esprit). Nul doute que je ne fais pas comme il le faudrait, cependant j'essaye de trouver des solution par moi même avant de chercher mieux ailleurs (alors on ne se moque pas !) :p.

Mon programme va en boucle chercher la valeur de horloge pour mettre à jour la frame d'une animation. Si le temps est supérieur à 100 ms alors je passe à la frame suivante.
Sauf que je souhaite pouvoir mettre l'animation en pause et donc j'utilise une méthode animation.pause().
Comme je n'ai pas trouvé le moyen avec sf::Clock de stopper le compteur, je le supprime et si sf::Clock n'existe pas, je renvoi 0. Comme le compteur est à 0, mon animation garde toujours la même frame. Je suis peut être pas très clair, je m'en excuse.

je changerais très certainement cette façon de faire mais le problème reste entier... Je ne comprend pas l'erreur que j'obtiens.

merci  :D

7
Système / sf::Clock et nullptr
« le: Août 09, 2014, 02:47:23 pm »
Salut,

Je ne pense pas que mon problème vienne de la classe sf::Clock mais plutôt de ma façon de programmer... Mais sait-on jamais.

J'ai donc une classe qui contient un attribut m_horloge de type sf::Clock. Cet attribut est initialisé à nullptr dans le constructeur.

J'ai ensuite une méthode comme celle-ci :
int cHorloge::time()
{
        if(m_horloge == nullptr)
                return 0;

        return int(m_horloge->getElapsedTime().asMilliseconds());
}
 

J'ai un segfault sur la ligne du if... On ne peut pas faire comme ça ? j'ai aussi essayé avec NULL et avec 0. Je ne comprend pas.

Merci de bien vouloir m'expliquer :).

8
Ok merci, je connaissais pas cette extension, j'ai encore beaucoup à apprendre  ;D.


J'en profite pour te remercier du boulot que tu as déjà accomplis. Je m'éclate à coder le "moteur graphique"(si je peux appeler ça comme ça) de mon jeu que je réutilise sous Qt pour faire l'éditeur de map. Ça ce fait bien grâce à toi.

Juste dommage de ne pas pouvoir utiliser Qt 5 à cause d'un problème avec winid, en tout cas je n'ai pas réussi. A priori cela vient de la mise à jour Qt, tu penses qu'il y a quand même un moyen? Le type renvoyé par winid est différents dans la v5 si j'ai bien compris...
Comme je n'arrive pas à compiler Qt 4 pour la dernière version de mingw, je ne peux pas profiter du c++ new gen lol.

9
Erf, je m'en doutais...

J'ai essayé de vérifier dans les sources mais je suis un peu trop noob. Je m'y suis perdu.
D'ailleurs, je n'ai pas trouvé l'implémentation de la classe sf::rect, elle est où?

Merci beaucoup, je peux effacer un attribut inutile maintenant lol.

10
Salut :).

Voilà j'ai un petit soucis et je me demande si je passe à côté de quelque chose ou si il y a un petit bug dans le module graphique.

Voici mon code :

classe entity :
protected:
    sf::RectangleShape m_boundingRect;
    sf::Rect<float> m_rect;
...
...
sf::Rect<float>* Map_entity::getBoundingRect()
{
    return &(m_boundingRect.getGlobalBounds());
}
 

classe map:
...
if(m_entity->getBoundingRect()->contains(static_cast<sf::Vector2<float> >(clic)))
...

Cela ne fonctionne pas! J'ai un comportement aléatoire.

Par contre si je remplace ma méthode getBoundingRect par :

sf::Rect<float>* Map_entity::getBoundingRect()
{
    m_rect = m_boundingRect.getGlobalBounds();

    return &m_rect;
}

 

Alors j'ai le comportement souhaité...

Une petite idée?

Merci les gens ;)

11
Salut, moi j'aimerais savoir comment tu utilise sfml et qt ensemble ...
En plus tu utilise code::blocks? J'apprécierais une petite explication car c'est ce que je voudrais faire mais franchement rien à faire même avec le tuto.

EDIT : Ok, trop simple à faire sous code::blocks et ça marche de suite. Moi j'essayais sous QtCreator et impossible d'y arriver avec le même code... Ça m'arrange donc merci.

12
Général / Re : [QSFMLCanvas] Erreur de compilation
« le: Avril 27, 2013, 01:39:20 am »
Personnellement, j'ai tout essayé...
sfml1.6 avec qt 4.8.4 sous mingw4.4 et le tuto dédié, ça ne marche pas(Je soupçonne le problème avec ma carte graphique amd).
sfml2.0 recompilée sous mingw4.7.2 avec qt 5.0.2 sous mingw4.7.2 et le tuto remanié que j'ai trouvé sur le net, idem. Problème de conversion de l'id et d'autres choses encore.

J'ai essayé de bidouiller mais rien n'y fait, je suis découragé. D'autant plus que je vois des posts de gens qui disent qu'ils arrivent à afficher la fenêtre. Bref

Pages: [1]
anything