Constructeur/Destructeur

Bonjour,
Comme je fais du C++ depuis quelques mois maintenant, j’ai trouvé une fonction qu’il manque a GD, c’est la possibilité de choisir le Constructeur de ses objets.
Qui fait du C++ doit me comprendre, à la création de l’objet, on peut choisir différents constructeurs, pour faire des flopées de choses intéressantes a la création de l’objet. (Choisir directement sa vie, sa position, son image, et des tas d’autres choses…)
Et je pense que ça serait une fonction intéressante a rajouter a GD, et qui éviterais la copie de super gros événements super chiant a modifier pour créer un personnage par exemple.
Pareil, si on ne veut pas ré-créer les événements de destruction d’un objet, un destructeur personnalisable serait intéressant.
Merci :slight_smile:

+1

On ne peut pas gérer ça avec un gros évènement externe et une variable ?
Genre “si monInit = 1 exécuter les évènements x à y de l’évènement externe”.

Peut être, mais si tu as déjà fait du C++, ça n’as rien de comparable a un vrai constructeur. :wink:
Dans un vrai constructeur, tu peux aussi donner des paramètres a un objet lors de sa création.
Je pensais plutôt a un truc du genre:
Objet → Clic droit → Éditer le constructeur, et ça ouvre un éditeur d’événement pour le constructeur de l’objet, et si, comme en C++, GD permet de filer des paramètres a l’objet a sa création, ça serait encore plus puissant :slight_smile:

En parlant de ça, si on cherchait un moyen de différencier 2objets du même type dans un jeu GD, je pense que l’on devrait pouvoir utiliser les pointeurs, donc copier la case mémoire d’un objet dans une variable, et pouvoir l’utiliser pour sélectionner précisément un objet :slight_smile: (en tout cas, moi en C++ j’ai besoin des pointeurs pour faire ça, et ça marche a tout les coups…)

yo jai une question par raport au c++.y a t il un moyen dexpliquer en gros comment ca fonctionne.car moi je foque pas mal la dedans car jai déja toucher a ca dans ma vie mais dans le type de GD je ny comprend rien du tout :confused:

:smiling_imp: Si vous pouvier mexpliquer comment ca marche precisément cela me ferait grand plaisir car ces temps ci je me crée un jeu de guerre avec un exemple de vision 3D que je modifie pi que jaurais envie d’y inserer des fichier c++ pour lui donner un caractère call of duty

Tu outrepasse beaucoup de règles du forum, notamment le fait que tu écrive en faisant beaucoup de fautes d’orthographes ( il y a plein de correcteurs de disponibles, même dans ton navigateur web ) ou que tu poste deux fois à suivre, ou encore que tu poste sur un sujet qui n’a (pratiquement) rien à voir.
En plus, il me semble que ce que ne maitrise pas la portée de ce que tu demande ( Tu parles de Call Of Duty sans apparemment comprendre que plus d’une centaine de personne hautement qualifiées on travaillé dessus durant des années ). Le C++ est quelque chose de relativement complexe, personne ne te l’expliquera en deux mots. Par contre il y a plein de tutoriels sur internet : Cherche.

Attention, c’est la première et dernière fois que je poste un tel message. La prochaine fois qu’une règle n’est pas suivie, j’efface le message directement ( afin de conserver un forum propre ).

Ouep mais quan même je me débrouille un peu en c++

Ces juste que sur GD la facon de le faire est différente

C’est bien, mais c’est pas le sujet, et tu n’as apparemment pas compris la leçon a propos de ta façon d’écrire :wink: (Orthographe, type de langage: il me semble que “Ouaip” c’est sur un tchat (ou sur jeuxvideo.com), mais pas sur un forum (normal en tout cas), et hors sujet. :wink: )

EDIT: Tiens j’avais pas vu que tu avais posté victor :confused:

Je suis pas une référence en matière de programmation ( D’ailleurs j’ai lu qu’un mot sur deux dans le cours de Mate@21 ), mais je vois pas qu’est-ce que ça pourrait apporter à GD ? Si en fait, je vois un peu mais, comme dit plus haut il me semble, il suffirait de créer des évènements externes.

Condition =>
Actions => Créer l’objet1 à 150;85 / Régler l’opacité de l’objet1 à 70% / Ajouter une force de 10px en Y à objet1

Ajouter l’option “Choisir le constructeur” compliquerait beaucoup trop GD, et ça ne ferai gagner que 5 ou 6 minutes dans la création du projet :wink:
Ça reste un avis personnel ( Si quelqu’un sait comment mettre un “c” cédille majuscule sous Windows sans devoir utiliser la correction orthographique, je suis preneur ).

OK, dans un vrai objet en C++, pour un jeu ou tu as un objet personnage, dans le constructeur, tu peux créer un bouclier et une épée par exemple qui appartiennent a cet objet, et pour l’instant, c’est pas faisable dans GD :wink:
Un constructeur qui crée directement une épée/un bouclier a un personnage, c’est quand même mieux :wink:
Quand il y en a un a gérer, avec GD c’est facile, mais si maintenant vous avez 50 objets a gérer, et qu’en plus ils ne sont pas tous contrôlés par le joueur, certain oui, d’autres par un autre joueur, d’autre IA, et d’autres en ligne, comment vous faites pour gérer ça si le bouclier et l’épée n’appartiennent pas a l’objet?
Vous êtes obligé de faire des centaines de boucles en espérant que ça va fonctionner. (et ça marche jamais et ça bouffe des ressources a mort… :wink: )
En C++ grâce à ce “détail” j’ai pas besoin de me soucier de la suppression des boucliers/épées ou même de leurs création et leurs gestion parce que le constructeur et le destructeur de l’objet s’en chargent. :wink:
Donc je donne quand même un exemple concret ou ça peut plus que servir :wink:

Après, je sais pas si c’est vraiment réalisable dans GD, parce que c’est déjà assez poussé je pense…
Mais maintenant je commence a bien me débrouiller en C++ (ça fait maintenant 6mois que je code qu’en C++ et j’ai un projet qui avance plutôt bien :wink: → C’est pour ça que je suis moins actif sur le forum…), et c’est quand on passe de GD au vrai C++ qu’on fait la différence entre:
-La facilité de GD a créer rapidement un jeu → Mais sa difficulté a gérer correctement tout ça. (et le temps de chargement des fichiers de sauvegarde dans le jeu…)
-La puissance du C++ → Les erreurs a la con qui vont avec, et le casse tête parfois qu’on trouve que là… (pour les sauvegardes, un fichier de 4mo met 0.0005s a se charger…)
Donc chacun ses avantages et inconvénients, maintenant je développe en C++ sous Linux, et j’espère pouvoir aider a tester GDLinux pour qu’il soit stable, je compte m’améliorer dans la vraie programmation, donc je propose des fonctions qui ici pourrons simplifier beaucoup la vie des futurs utilisateurs de GD, mais je ne sais même si un jour je les utiliserais (pour apprendre a mon petit frère a créer un jeu avec GD qui sait?! :slight_smile: )
Bref, comme justement je suis passé de la logique GD (ou c’est vraiment très bien, très automatique) a la logique C++ (ou pour afficher comme dans GD les objets faut quand même faire quelques boucles), j’en profite pour donner les idées que j’ai dans ce que l’on peut voir en C++ et qui manque dans GD → Et le fichier.h avec tout un objet dedans bien personnalisé (avec Constructeur et Destructeur) ça manque quand même beaucoup je pense :sunglasses:
Voilà :slight_smile:

C’est sûr que si tu abordes ça dans ce sens … Mais ça servirai uniquement dans de gros projets :confused:
Si je fais un snake => Ça sert pas
Si je fais un mario => Ça sert
Si je fais un doodle jump => Ça sert pas

Enfin, je reste sur mon point de vue : n’est pas trop utile pour le moment :smiley:

Hum, pour un doodle jump, pas vraiment, mais en même temps, si tu limite GD a un doodle jump c’est assez dévalorisant, pareil pour le snake… un projet un minimum aboutit (et mieux qu’un snake) peut vite trouver ça utile :slight_smile:
Un Mario / Plateforme, oui (Mon projet est orienté plateforme/action, mais n’as rien avoir avec Mario)
Dans un RPG ça sert.
Si on reste petit: on veut améliorer le tuto de GD en rajoutant la possibilité aux vaisseaux d’utiliser un bouclier (pareil pour les ordis) ça sert → tu vois que j’ai pas été cherché loin…et que ça commence déjà a servir… :wink:

J’ai retenu qu’une seule chose de ma prof de maths : soit tu utilises un bazooka pour tuer une mouche, soit tu utilises la tapette !
Crone123 tu préfères utiliser la méthode avec la tapette qui est un peu plus complexe.
Moi je préfère utiliser la méthode bazooka qui est plus simple mais un peu plus longue.

Hop là je suis pas d’accord ! Avec les fonctions qui permettent de charger un fichier en mémoire, si c’est bien fait il y a pas de raison que GD soit plus lent qu’un code en C++.

L’extension association d’objets permet de se faciliter très grandement la tâche.

Tu te trompe sur un point : Un constructeur va peut être créer un bouclier/épée, mais c’est pas pour autant qu’il appartiendra à l’objet en question. Voir mon explication ci dessous :

Ce que tu propose dans ton message n’a pratiquement rien à voir avec les constructeurs et destructeurs ( J’exagère un peu ). C’est pas parce que j’ajouterai des constructeurs aux objets ( c’est à dire des évènements automatiquement lancés quand un objet est créé ), que forcément pour autant tu arrive plus facilement à lier des objets entre eux.
Ce que tu propose dans ton message, c’est plutôt un mécanisme de classe, les objets pouvant “contenir” d’autres objets. ( Les constructeurs sont certes un élément de ce mécanisme de classe, mais ne font pas tout ).

Il n’en reste que si les constructeurs et destructeur faciliteraient la création, l’idée n’est pas mauvaise, on peut s’en passer plus facilement qu’on le croit : Il suffit de bien s’organiser. On peut ainsi mettre la variable “MeDétruire” d’un objet à détruire à 1, au lieu de le supprimer direct.
Ensuite, à la fin de la feuille d’évènements, on appelle par exemple une fonction “GérerLesDestructions”.
Cette fonction va examiner tous les objets, et pour ceux qui ont leur variable “MeDétruire” égale à 1, et bien elle les supprime et fait également au passage quelques actions supplémentaires si besoin.

Quand au fait de simuler les classes, l’extension d’association d’objets permet de faciliter les liens entre les personnages et leurs boucliers :wink:
Par contre, on ne va pas pouvoir créer des structures/classes aussi évoluées qu’en C++ ou que dans un langage orienté objet, certes, certes. ( C’est d’ailleurs plutôt sans doute là qu’il faudrait faire une demande de nouvelle fonctionnalité. )

On peut ainsi reproduire un modèle orienté objet, dans GD, à l’instar de ce qui se fait en C : On créé des fonctions qui jouent le rôle de constructeur et destructeur.

OK, ben je pense que ça serait intéressant les structures comme en C++ pour les objets :slight_smile:
(Après, vois si c’est faisable ou pas, parce que c’est complexe a mon avis…)

Effectivement, les dernières versions sont plus rapides, mais j’ai pas tellement utilisé ça cette époque, je me rappelle par contre bien des 10minutes que mettait mon jeu a charger 150 a 300objets, par contre (la vitesse de sauvegarde/chargement diminuait de plus en plus avec le nombre d’objets…), même avec les nouvelles fonctions sur les fichiers, qui font quand même gagner beaucoup de temps, il me fallait bien 30s pour sauvegarder des objets sur un écran de 1024768: Taille d’objet: 3232 disposé de façon RPG, et sur 3calques, ça reste quand même plus lent que le vrai C++ (enfin, 800 - 900objets en moyenne chargés en 30s ça va déjà… :slight_smile: ), mais c’était GD 1.5, je sais pas si le passage a GD 2.0 accélère les fichiers aussi.
En C++ j’utilise pas la même chose, en fait, j’utilise la bibliothèque standard pour les fichiers (on peut déjà faire beaucoup avec :slight_smile: ), et ça va très très vite, TinyXml je sais pas si justement c’est aussi rapide que la bibliothèque standard…
Mais là, c’est pareil, je sais pas si a part moi, beaucoup de gens font des jeux GD avec éditeurs de niveaux… (en fait, moi j’adore créer mes propres niveaux depuis le jeu c’est pour ça que j’ai eut ce problème), bref, passons :slight_smile:

Sinon:
Tu parle du C, mais le C n’est pas orienté objet (je me trompe? :confused: )
Donc, quand je vois SuperTux en C, j’ai une grande question qui me viens: “Mais comment ils font pour faire ça sans Objets?!” :confused:
Quelqu’un sait? (puisqu’on parle d’objets…)
Merci :slight_smile:

Tu parle du C, mais le C n'est pas orienté objet (je me trompe? :? )

Regarde GTK+, c’est du C orienté objet. Evidemment, dans ce cas, on utilise des struct (qui existe en C) et on fait des fonctions qui demande ces structs en 1er paramètre, genre :

gtk_entry_set_text(Entry*, std::string);

Ah ouais OK, mais ça reste beaucoup moins bien que le C++…
Pourquoi ils ont pas fait un GTK+ en C++? (Encore, faire un GTK en C et un GTK+ en C++ ça aurait été logique, mais GTK+ en C, je pige pas trop…)