IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Gestionnaire de son pour un jeu video


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2010
    Messages : 34
    Points : 46
    Points
    46
    Par défaut Gestionnaire de son pour un jeu video
    Bonjours à tous,

    Voila déjà un moment que j'ai commencé la réalisation d'un jeu vidéo en HTML5 et JavaScript. Le problème que je rencontre actuellement concerne la gestion des sons dans le jeu.
    Il s'agit d'un shoot em up classique. Les sons joués au cours de la partie et en même temps sont donc nombreux (musique d'ambiance + tir des vaisseaux + tous les effets sonores).
    J'ai fait des essai en créant une liste de son à jouer, où un son correspond à un seul "truc" (un tir = un son). Cette liste est vidée au fur est à mesure que les sons sont joués.
    Mais cela ne me semble vraiment pas être la bonne approche. Si la cadence de tir d'une arme est élevé, j’atteins rapidement saturation.
    La solution pourrait être d'utiliser un son [de mitrailleuse par exemple] plus long qui est joué en boucle tant que le joueur est entrain de tirer. Mais la encore si le joueur arrête de tirer au moment ou le son vient juste de commencer, celui ci se termine alors qu'il n'y a plus de tir. Sans comptait que la gestion des sont est beaucoup plus compliquer de cette manière.

    N'étant vraiment pas compétant dans le domaine audio et complètement novice dans les jeux vidéos, quelles approche me conseillez vous d'adopter pour coder mon gestionnaire de son?

    Merci à tous ceux qui me lirons ou(inclusif) me répondrons. Bonne journée !

  2. #2
    Invité
    Invité(e)
    Par défaut
    utilise une balise audio par son

  3. #3
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2010
    Messages : 34
    Points : 46
    Points
    46
    Par défaut
    En utilisant une balise par son, je ne pourrais pas jouer plusieurs fois le même son en même temps. Je me trompe?

    J'avais essayer de faire des insertions de balise audio à la volet mais ce n'est pas viable pour une aussi grande quantité de son.

  4. #4
    Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2010
    Messages : 34
    Points : 46
    Points
    46
    Par défaut
    J'ai essayer de faire ma petite sauce avec ce que j'ai trouvé sur le web, ce n'est pas encore terminé mais ça gère déjà le problème des sons simultanés et des différents formats sans faire de recopie lourde des éléments audio avec des cloneNode() comme j'ai pu le voir ailleurs.

    Pour ceux que ça intéresse voici ma solution :

    Les sons sont tous créer au chargement du jeu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    function CreerSon(paramSon){
        //Objet son :
        var son = { 
            mId: paramSon[0],  //"son1"
            mLoop: paramSon[1],  //false
            mVolume: paramSon[2],  //1
            mSrc: paramSon[3]  //"Son/laser"
        };
     
        //Création de l'element audio si il n'existe pas :
        if (!document.getElementById(son.mId)){
            var elementAudio = document.createElement('audio'); 
     
            var Mp3 = !!elementAudio.canPlayType && "" != elementAudio.canPlayType('audio/mpeg');
            //var Ogg = !!elementAudio.canPlayType && "" != elementAudio.canPlayType('audio/ogg; codecs="vorbis"');
     
            elementAudio.id = son.mId;
            if (Mp3) elementAudio.src = son.mSrc + ".mp3";
            else elementAudio.src = son.mSrc + ".ogg";
            document.body.appendChild(elementAudio);
        }
     
        return son;
    }
    Le gestionnaire audio est déclaré en global :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    var gGesionnaireAudio = new GestionnaireAudio();
     
    function GestionnaireAudio(){
        var sonSimultaneMax = 10;
        this.mPistesAudio = new Array();
     
        for (i=0;i<sonSimultaneMax;i++) {                      
            this.mPistesAudio[i] = new Array();
            this.mPistesAudio[i]['piste'] = new Audio();	   
            this.mPistesAudio[i]['termine'] = -1;		
        }
     
        this.Jouer = function(son){
            for (i=0;i<this.mPistesAudio.length;i++) {
                var timer = new Date();
                if (this.mPistesAudio[i]['termine'] < timer.getTime()) {
                    this.mPistesAudio[i]['termine'] = timer.getTime() + document.getElementById(son.mId).duration*1000;
                    this.mPistesAudio[i]['piste'].src = document.getElementById(son.mId).src;
                    this.mPistesAudio[i]['piste'].volume = son.mVolume;
                    this.mPistesAudio[i]['piste'].load();
                    this.mPistesAudio[i]['piste'].play();
                    break;
                }
            }
        }
    }
    Lancement d'un son :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gGesionnaireAudio.Jouer(fondAudio);
    Il faut maintenant ajouter la gestion des sons continu (en boucle) et pouvoir les stopper à la demande.

Discussions similaires

  1. JavaFx pour un jeu video
    Par duboi0842 dans le forum JavaFX
    Réponses: 3
    Dernier message: 01/03/2010, 22h04
  2. Gestionnaire d'évènements pour un jeu
    Par Plomeg dans le forum C++
    Réponses: 5
    Dernier message: 21/02/2010, 00h24
  3. Demande d'aide pour la réalisation d'un petit jeu video
    Par Frank1010 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 08/09/2009, 07h59
  4. Réponses: 2
    Dernier message: 11/01/2008, 16h31
  5. Cherche des codeurs C++ pour un Jeu Video
    Par Croleo dans le forum Projets
    Réponses: 2
    Dernier message: 28/03/2007, 00h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo