Code externe

Bonjour tout le monde !

Cela fait plusieurs années que j’utilise GDevelop et j’aime beaucoup ce logiciel, la rapidité de création est vraiment exceptionnelle, j’adore :smiley:

Je poste ici parce que j’ai un nouveau projet en tête, dans lequel il faudrait que je puisse ajouter dans mon jeu (natif uniquement) des sons et musiques externes : par exemple, dans le jeu compilé, je peux ouvrir une boite de dialogue pour sélectionner un fichier audio qui s’ouvre directement dans le jeu. J’ai déjà essayé avec les évènements classiques (avec l’extension des boites de dialogue) mais cela ne fonctionne pas.

Je me suis donc renseigné sur la bibliothèque SFML et ses composants qui gèrent la musique et le son, ils ont l’air assez simples d’utilisation. En fait le moment où je bloque c’est dans l’ajout de code externe dans GDevelop. J’ai suivi le tutoriel a la lettre [ wiki.compilgames.net/doku.ph … ithcppcode ] mais au moment du test, Gdevelop affiche immédiatement (au moment ou la compilation est en cours) la notification “Les changements appliqués aux évènements seront appliqués a la prochaine compilation” et les outils C++ affichent "#include expect “FILENAME” or "… Je ne comprends pas, le tutoriel ne fonctionne pas ! :confused:

Avez vous une idée pour m’aider ?
Merci d’avance ! :wink:

PS : Je précise que le projet n’est pas commencé, je suis juste en train de tester les fonctionnalités du logiciel pour savoir s’il me permet de réaliser mon projet :smiley:

Salut,

dans le champ “fichiers d’en-tête”, retire les lignes vides (il faudra le refaire à chaque fois vu que GDevelop semble en rajouter une à chaque réouverture de la fenêtre d’édition de l’événement C++).

Oah, excellent ! Merci beaucoup !!! :smiley: ça a fonctionné, il me semblait pourtant bien l’avoir retirée…

Je précise juste à des fins de correction de bugs que si je suis le tuto a la lettre, j’obtiens l’erreur “class RuntimeScene has no member named IsFirstLoop”.

Merci et bon courage pour vos projets :smiley:

Rebonjour, j’ai juste une autre question vis a vis des sons et musiques du coup : comment fonctionne le système des canaux sur GDevelop ? J’ai lu toute la doc SFML et il n’est aucunement question de canaux audio…

Est ce que cela permet de nommer les objets audio (sf::Music par exemple) ou autre ? Et dans ce cas, quel nom faut il donner a un objet sf::Music pour qu’il corresponde a un canal de GDevelop ?

Merci d’avance :smiley:

Il faut utiliser les fonctions fournies par GDevelop pour utiliser les canaux. Ton événement C++ a accès à la scène dans une variable de type “RuntimeScene” et appelée “runtimeScene”. Il faut ensuite en récupérer le jeu (les sons sont globaux au jeu et non à la scène) puis récupérer le SoundManager :

runtimeScene.game->GetSoundManager().XXX

en remplaçant XXX par une des méthodes de cette page : 4ian.github.io/GD-Documentation/ … nager.html

D’accord, donc si je comprends bien, pour que ma fonction codée en C++ puisse lire un fichier son externe au jeu (non ajoutée aux ressources de celui ci une fois le jeu compilé) dans un canal, je dois écrire quelque chose qui ressemble à ça ? :

RuntimeScene.game->GetSoundManager().PlayMusicOnChannel(gd::String("chemindela/musique.ogg"),0,false,100,1.0);

J’ai alors l’erreur “expected unqualified-id before ‘.’ token”.

Merci de votre aide, je ne suis pas très bon en programmation X)

R minuscule devant RuntimeScene

C’est étrange, j’obtiens alors l’erreur “runtimeScene was not declared in this scope”

[code]#include <RuntimeScene.h>
#include <SFML/Audio.hpp>

void MyFunction(RuntimeScene & scene)
{
runtimeScene.game->GetSoundManager().PlayMusicOnChannel(gd::String(“chemindela/musique.ogg”),0,false,100,1.0);

}[/code]

As tu une idée ? :smiley:

the function parameter is “RuntimeScene & scene”, and yu use “runtimeScene”, wich is not the class name or the variable :unamused:
Use:

scene.game->etc

Thank you, but when I write :

scene.game->GetSoundManager().PlayMusicOnChannel(gd::String("chemindela/musique.ogg"),0,false,100,1.0);

The compiler says : “Invalid use of incomplete type ‘class RuntimeGame’”

:confused:

Il faut mettre l’include de RuntimeGame.

QUelle ligne dois-je donc écrire pour inclure RuntimeGame ? C’est un fichier ?
:smiley:

Ah attendez, en cherchant je suis parvenu a inclure tous les fichiers, et la ligne est maintenant fonctionnelle ! :smiley:

scene.game->GetSoundManager().PlayMusicOnChannel(gd::String("chemindela/musique.ogg"),0,false,100,1.0);

Merci a tous. Juste un dernier point a éclaircir, comment puis-je remplacer le chemin (gd::String(“blablabla”)) par le texte d’une variable, que je peux définir avec l’extension des boites de dialogue ?

Pourquoi ne pas le faire avec les évènements tout simplement ?

L’idée de base est de pouvoir ouvrir un son qui n’est pas présent de base dans le jeu final, comme pourrait le faire par exemple un lecteur audio. Le problème est que j’ai tout essayé avec les évènements, il n’est possible de lire un fichier (comme un son ou comme une musique) que s’il est présent dès la compilation du jeu (il est alors intégré dans les données de l’application).

Moi, j’ai besoin de pouvoir ouvrir un son externe, la seule voie que je connaisse pour faire cela est de passer par du C++… :confused:

Personne n’a une idée ? :confused:

Up svp, quelqu’un sait comment charger une musique externe dans un canal audio ?

Salut.

It seems that my solution bears relevance to your question
(project included for your test):

Thank you for showing me this topic ! :smiley: I’ll see if I can use it in my project.

It’s a proof of concept of how you can dynamically specify some sound file names and play them through C++ (or js) code event:

// Generate random file
gd::String random_file = "sentence" + gd::String::From(random_number) + ".ogg";

// Play it
scene.game->GetSoundManager().PlaySoundOnChannel(random_file,0,false,100,1.0);