HTML5 аудио множественная игра - PullRequest
3 голосов
/ 04 марта 2011

Я программирую игру на Javascript и хочу использовать один звук несколько раз.Я могу сделать это с загрузкой одного звука несколько раз в массив.Но я хочу загрузить один звук один раз и «скопировать» его в массив, чтобы воспроизвести его несколько раз.Это метод, который у меня сейчас есть:

this.list = [
        "LaserShot", //http://www.freesound.org/samplesViewSingle.php?id=39459
        "Ding", //http://www.freesound.org/samplesViewSingle.php?id=5212
        "Rocket" //http://www.freesound.org/samplesViewSingle.php?id=47252 -> http://creativecommons.org/licenses/sampling+/1.0/
    ];

...

for (i in this.list) {
        this.sounds[this.list[i]] = new Array();

        for (var j = 0; j < this.channels; j++) {
            this.sounds[this.list[i]][j] = new Audio("./sounds/"+ this.list[i] + type);
        }
    }

Я просто хочу сделать это:

for (i in this.list) {
        this.sounds[this.list[i]] = new Array();

var tempAudio = new Audio("./sounds/"+ this.list[i] + type);

        for (var j = 0; j < this.channels; j++) {
            this.sounds[this.list[i]][j] = realCopyOfTempAudio;
        }
    }

Большое вам спасибо.

1 Ответ

0 голосов
/ 17 февраля 2016

Мой опыт:

лучше создать больше аудио-тегов HTML с тем же источником. Я фанат JS, но на этот раз лучше иметь HTML-теги аудио в формате HTML.

Я сделал дубликаты аудио тегов и украсил свои потребности. Если вы хотите воспроизводить один и тот же звук несколько раз в секунду, добавьте больше клонов.

также вы можете исправить ошибку автозапуска (вместо EXE_JUST_ONE_TIME вы можете использовать событие переопределения клика, сейчас это не важно):

    <audio controls id="LaserShot" >
     <source src="LaserShot.mp3" type="audio/mpeg">
     <source src="LaserShot.ogg" type="audio/ogg">
    </audio>
     <audio controls id="LaserShot_CLONE" >
     <source src="LaserShot.mp3" type="audio/mpeg">
     <source src="LaserShot.ogg" type="audio/ogg">
    </audio>

<script>

  var EXE_JUST_ONE_TIME = false;

  document.addEventListener("click" , function(e) {

    if (EXE_JUST_ONE_TIME == false){

      EXE_JUST_ONE_TIME = true;

      document.getElementById("LaserShot").play();
      document.getElementById("LaserShot").pause();

      document.getElementById("LaserShot_CLONE").play();
      document.getElementById("LaserShot_CLONE").pause();

      // Buffering in progress 
      // now you can play programmability from code
      // One click or touch can prepare max 6 audios 

    }
 }


Last part (need to be handled) this handler works only for one clone:


    var play_shoot = function(){

     if (document.getElementById('LaserShot').duration > 0 &&
       !document.getElementById('LaserShot').paused) {

      document.getElementById('LaserShot_CLONE').play();

     } else {

      document.getElementById('LaserShot').play();

     }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...