CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème avec la SFML

nounoursheureux
nounoursheureux
Niveau 10
23 mars 2014 à 19:01:36

Bonjour :)

Je commence à apprendre la SFML (au passage, la doc est sublime :coeur: ). Je me suis donc mis en tête de faire un Pong (en C++). Je cherche donc à faire une classe Balle, qui contient un objet RectangleShape, qui lui sera affiché. Bon au passage j'avoue que je me suis un peu jeté tête baissée, donc si il y a des façons de faire que vous trouvez meilleures, n'hésitez pas :hap: . Mon code compile, je me dis : "Chouette, ça marche". Sauf que quand je lance l'appli, aucune trace de ma balle. Ça fait un bout de temps que je cherche, sans succès, je m'en remets donc à vous :hap: . Le code ici :
http://www.github.com/nounoursheureux/pong.git

Il est très possible que le code soit très sale, car j'ai un peu tout tenté avant de venir ici, donc il doit rester des résidus d'à peu près tous mes essais (même si j'ai tenté de rendre mon code un peu présentable avant de vous le montrer).

Merci d'avance, et n'hésitez pas à donner votre avis sur chaque ligne de code, je suis encore en phase d'apprentissage ! :svp:

Mjonir
Mjonir
Niveau 26
23 mars 2014 à 19:08:53

À fonction.cpp:9 tu déclares une variable locale "balle", rien à voir avec ton attribut "Ball::balle". Tu devrais aussi utiliser une liste d'initialisation si possible.

nounoursheureux
nounoursheureux
Niveau 10
23 mars 2014 à 19:15:57

Tu veux dire que ma variable balle qui fait partie de l'objet ball n'est pas accessible depuis le main() ?

Mjonir
Mjonir
Niveau 26
23 mars 2014 à 22:57:32

Je ne sais pas quoi te dire d'autre si ce n'est que cette ligne:
"RectangleShape balle(Vector2f(10,10));"

Déclare une variable locale "balle". C'est un objet temporaire qui n'a rien à voir avec ta classe. Si tu as un compilateur intelligent, tu devrais également avoir un warning du type "balle shadows a member of this".

Tu devrais (re)voir un cours de C++, chapitre constructeurs, tu m'as l'air un peu flou sur le sujet.

nounoursheureux
nounoursheureux
Niveau 10
24 mars 2014 à 07:23:13

Merci beaucoup, maintenant ça marche :coeur:

J'avais en effet utilisé le constructeur, désolé pour cette erreur de débutant :rouge:

nounoursheureux
nounoursheureux
Niveau 10
24 mars 2014 à 07:23:38
  • mal utilisé
nounoursheureux
nounoursheureux
Niveau 10
24 mars 2014 à 22:29:26

Me revoilà, avec encore un nouveau problème ~ :hap: ~

Le code est toujours dispo sur mon Github :oui:
Le main.cpp ne compile pas, mais c'est normal et je m'en occuperais quand j'aurais résolu l'autre problème.
Celui-ci se trouve dans le fichier fonctions.cpp . J'obtiens une erreur "within this context" à chaque fois que je mentionne l'objet posBalle. Cette erreur venant du fait que la fonction n'a pas le droit d'accéder aux données de la classe Ball, j'ai spécifié que la fonction checkCollision est une fonction amie de la classe Ball. Je n'obtiens pas d'erreur sur les données de la classe Terrain, mais par contre j'ai toujours l'erreur "within this context" pour les objets de la classe Ball. Je ne comprends pas où est mon erreur, et je n'ai pas voulu créer un 2e topic juste pour cette question.
Merci d'avance :)

LEpigeon-888
LEpigeon-888
Niveau 12
24 mars 2014 à 23:29:46

J'ai pas regardé ton code, mais en principe si t'utilise les fonction/classes amies c'est que ton code est mal pensé, et donc c'est en soi une erreur.

nounoursheureux
nounoursheureux
Niveau 10
25 mars 2014 à 06:40:38

Comment faire si j'ai une fonction qui doit accéder aux attributs de deux classes alors :question:

Mjonir
Mjonir
Niveau 26
25 mars 2014 à 09:05:18

Pour quand même tempérer ce que dit LEpigeon-888, les fonctions/classes amies peuvent parfois faire partie d'un design bien réfléchi lorsqu'elles renforcent l'encapsulation (ou permettent certains design patterns particuliers). Mais là je parle d'un niveau de quelqu'un qui sait vraiment ce qui fait. À ton niveau, tu peux effectivement te dire que si tu as à utiliser "friend", tu fais de la merde :p

Pour accéder aux attributs protégés d'une autre classe, il suffit que celle-ci mette à disposition des accesseurs. Exemple:
int getMyAttribute() const { return m_attr; }

Au passage, question messages d'erreur: "within this context" n'en est qu'une partie. Je ne sais pas si c'est un soucis d'anglais, mais si tu veux on peut traduire par "à cet endroit". Le vrai corps du message d'erreur est la ligne au dessus dans le build log. Et en général quand tu demandes un coup de main, ça peut servir de copier/coller toute la partie intéressante.

PanzerKadaver
PanzerKadaver
Niveau 6
25 mars 2014 à 09:29:45

J'ai croisé un "using namespace sf" dans ton code. Sache qu'à l'avenir cette ligne pourra te générer des erreurs.
Etape 1) Soit curieux et renseigne toi sur ce que fait "using namespace" =)
Etape 2) Comment pourrait-tu écrire ton code sans ?

nounoursheureux
nounoursheureux
Niveau 10
25 mars 2014 à 18:21:39

Ok merci tout le monde, pour l'instant j'essaie de réécrire ce qui marchait pas avec vos propositions :)

nounoursheureux
nounoursheureux
Niveau 10
26 mars 2014 à 19:16:20

Rebonjour :)

Bon j'ai encore un problème (désolé mais il faut bien débuter un jour :hap: ). J'ai cherché pendant plusieurs heures, j'ai réécrit mes fonction et mes classes, mais rien n'a marché :( . Je vous explique le problème :

J'ai lu vos posts et j'ai modifié mon code en perspective (j'ai notamment supprimé les fonctions amies). Mon code compile, mais les rebonds ne fonctionnent pas. C'est-à-dire que tout se passe bien, la balle se déplace comme il faut, mais quand elle rencontre un bord elle devrait rebondir or elle continue sa route comme si de rien n'était, et sort de l'écran. Vous comprendrez que c'est problématique :noel:

J'espère que vous comprendrez d'où vient le problème, j'y ai passé beaucoup de temps mais je n'ai pas trouvé (à la base je voulais me débrouiller seul, je n'aime pas faire mon assisté, mais je ne comprends vraiment pas :( ).
Merci d'avance :-)

Mjonir
Mjonir
Niveau 26
26 mars 2014 à 19:22:58

Le débogage ça s'apprend aussi. C'est une compétence transversale presque aussi importante que l'algorithmique je trouve.

Utilise un débogueur (gdb), et mets des breakpoints à chaque return de ta fonction checkCollision pour voir si la collection est à un moment détectée ou non. Si non, t'as trouvé le problème. Si oui, suis le cote ligne par ligne à partir de là pour trouver où l'évènement n'est pas géré correctement.

nounoursheureux
nounoursheureux
Niveau 10
26 mars 2014 à 19:25:58

Ok merci je vais me documenter à propos de GDB et des breakpoints :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment