Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 11h08   #1
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 11
Points : 11
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 !
lordmyko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 13h07   #2
Membre chevronné
 
Homme Krusty
Inscription : mai 2009
Messages : 472
Détails du profil
Informations personnelles :
Nom : Homme Krusty
Localisation : France

Informations forums :
Inscription : mai 2009
Messages : 472
Points : 617
Points : 617
utilise une balise audio par son
__________________
programmer n'est pas connaitre tous les moindres détails d'un langage mais savoir exploiter sous toutes ses facettes ce que l'on connait.
mekal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h09   #3
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 11
Points : 11
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.
lordmyko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 16h44   #4
Candidat au titre de Membre du Club
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 11
Points : 11
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 :
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 :
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 :
gGesionnaireAudio.Jouer(fondAudio);
Il faut maintenant ajouter la gestion des sons continu (en boucle) et pouvoir les stopper à la demande.
lordmyko est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h53.


 
 
 
 
Partenaires

Hébergement Web