Skip to content

Error thrown when destroying the game too early and using WebAudio #684

@jf-m

Description

@jf-m

This Issue is about

  • A bug in the API:
    • Phaser version(s): 2.16.2
    • Live example: /
    • What steps produce the bug: Load and destroy the scene before the loader has finished loading the sound assets and/or after loaded an audio sound but before decoding
    • What should happen: No error should be thrown
    • What happens instead: errors are thrown
    • If there's an error:
      • What's the error message? See the comment below
      • What's the error trace (expand the error message)? See the comment below

Hello there and thank you for maintaining this repo !

Several errors may occurs when destroying the game too early. These errors are all related to WebAudio.

Note that these errors occurred in a single page app where window.PhaserGlobal = {}; has been set as suggested in the doc.

1. Cannot set property 'onended' of null

Stacktrace:

phaser.js:59104 Uncaught TypeError: Cannot set property 'onended' of null
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Sound._removeOnEndedHandler (phaser.js:59104)
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Sound.onEndedHandler (phaser.js:58397)

Concerned line of code:

https://github.com/photonstorm/phaser-ce/blob/585160726bf3be112d7a37c8469171a3203e1ae5/src/sound/Sound.js#L1135-L1138

Comment:
I guess this._sound is null or undefined at this stage, when the whole game has been destroyed.

2. Cannot read property 'noAudio' of null

Stacktrace:

phaser.js:56719 Uncaught TypeError: Cannot read property 'noAudio' of null
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Loader.getAudioURL (phaser.js:56719)
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Loader.loadFile (phaser.js:56269)
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Loader.processLoadQueue (phaser.js:56008)
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Loader.asyncComplete (phaser.js:56110)
    at XMLHttpRequest.xhr.onload (phaser.js:56619)

Concerned line of code:
https://github.com/photonstorm/phaser-ce/blob/c7f5f4345530fea0ad5a2d578b1c7fc26513380a/src/loader/Loader.js#L1271-L1276

https://github.com/photonstorm/phaser-ce/blob/c7f5f4345530fea0ad5a2d578b1c7fc26513380a/src/loader/Loader.js#L2850-L2855

Comment:
We should check the existence of this.game and this.game.sound beforehand.

3. Cannot read property 'usingWebAudio' of null

This one is a warning, not an error so it's less important but still.

Stacktrace:

Cannot read property 'usingWebAudio' of null
asyncComplete | @ | phaser.js:56107

Concerned line of code:

https://github.com/photonstorm/phaser-ce/blob/c7f5f4345530fea0ad5a2d578b1c7fc26513380a/src/loader/Loader.js#L2407-L2410

https://github.com/photonstorm/phaser-ce/blob/c7f5f4345530fea0ad5a2d578b1c7fc26513380a/src/loader/Loader.js#L3051-L3061

Being catch and log as a warning here:
https://github.com/photonstorm/phaser-ce/blob/c7f5f4345530fea0ad5a2d578b1c7fc26513380a/src/loader/Loader.js#L2240

4. Cannot read property 'decodedSound' of null

Stacktrace:

Uncaught TypeError: Cannot read property 'decodedSound' of null
    at AudioContext.<anonymous> (phaser.js:59771)

Concerned line of code:
https://github.com/photonstorm/phaser-ce/blob/ccbe5d7277194a4607492928ff26997ebc34c9ed/src/sound/SoundManager.js#L527-L534

5. Cannot read property 'update' of null

Stacktrace:

phaser.js:14822 Uncaught TypeError: Cannot read property 'update' of null
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.Game.update (phaser.js:14822)
    at push../resources/assets/js/plugins/phaser.js?a3d3.Phaser.RequestAnimationFrame.updateRAF (phaser.js:43150)
    at _onLoop (phaser.js:43134)
    at __trace__ (bugsnag.js:2613)

Concerned line of code:
https://github.com/photonstorm/phaser-ce/blob/585160726bf3be112d7a37c8469171a3203e1ae5/src/core/Game.js#L982-L991

Comment:
I guess that one is not related to the use of WebAudio

Most of this should be solved by adding some conditional check I suppose.

Once again, thank you for maintaining this repo, have a good day. 👍

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions