Игра с AngularJS/Phaser.io и методом уничтожения

Я делаю игру с другом, и у нас есть некоторые проблемы с AngularJS и Phaser.

Итак, у нас есть страница с названием game, в ней есть шаблон, контроллер и фабрика. Есть страница, которая "перенаправляет" нас на страницу игры (просто со ссылкой).

В шаблоне:

<div id="game"></div>
<a href="#/page">Back</a>

На заводе :

// function prealod and create ....
init: function(data) {
     game = new Phaser.Game(width, height, Phaser.AUTO, 'game', { preload: preload, create: create });
},
destroy: function() {
     game.destroy();
}

В контроллере:

gameFact.init();
$scope.$on('$destroy', function() {
     gameFact.destroy();
});

Кода конечно больше.

Проблема проста:

Если я захожу на страницу игры, Phaser очень хорошо загружает игру (у нас просто отображается карта со спрайтами). После этого я нажимаю кнопку «Назад» и повторно нажимаю на ссылку, чтобы вернуться на страницу игры. Если я сделаю это 7 раз, в консоли появится ошибка:

Uncaught SyntaxError: Failed to construct 'AudioContext': number of hardware contexts reached maximum (6).

И через несколько секунд у меня есть эта ошибка:

Uncaught TypeError: Cannot read property 'gain' of undefined

Я уже ищу в Интернете, и решение:

  1. Используйте iFrame (я действительно не думаю, что iFrame — хорошее решение)
  2. Используйте метод destory (он не работает)

Вы знаете, как решить эту проблему?

Если у вас есть идеи, не стесняйтесь. Даже если вы используете другой игровой фреймворк (возможно, он работает так же).


person lludol    schedule 13.10.2014    source источник
comment
Не уверен, хотите ли вы сохранить состояние при переключении маршрутов, но простой target="_self" на якоре заставит angular перезагрузить все.   -  person Christopher Marshall    schedule 14.10.2014
comment
Спасибо за ваш ответ, но он не работает. У меня все еще есть эта ошибка в консоли: Uncaught SyntaxError: не удалось построить «AudioContext»: количество аппаратных контекстов достигло максимума (6).   -  person lludol    schedule 14.10.2014


Ответы (3)


У меня была аналогичная проблема, кажется, что destroy() работает неправильно (проблема обсуждается здесь) с текущей версией:

Could you please test out the dev branch, which has lots of fixes for this in.

Я решил проблему, используя ветку разработки (доступно здесь)

person Brett Gregson    schedule 19.12.2014
comment
Какую версию ветки dev вы используете? - person jjwallace; 28.04.2016
comment
@jjwallace это было давно, я думаю, что основная ветка теперь должна работать нормально. Но я думаю, что это была ветка 2.1.0-dev - person Brett Gregson; 28.04.2016

Вам нужно использовать директиву Angular и использовать для этого событие навигации, проверьте мой пример: http://market.ionic.io/plugins/ionphaser

С уважением, Николлс

person jdnichollsc    schedule 10.09.2016

Появился новый веб-компонент для интеграции Phaser с любой другой платформой https://github.com/proyecto26/ion-phaser

person jdnichollsc    schedule 04.06.2019