Jump to content

Trouble with creating "grand child" instance of Sprite


Jerorx
 Share

Recommended Posts

Hi people,

I'm extending the Sprite class with a class named "Being", which I further extend with two child classes, "Monster" and "Player". But it doesn't work. Here is first the code for my classes.

function Being(x,y,key){
    Phaser.Sprite.call(this, game, x,y,key);
    game.add.existing(this);
}
Being.prototype = Object.create(Phaser.Sprite.prototype);
Being.prototype.constructor = Being;

function Player(x,y,key){
    Being.call(x,y,key);
}
Player.prototype = Object.create(Being.prototype);
Player.prototype.constructor = Player;

function Monster(x,y,key){
    Being.call(x,y,key);
}
Monster.prototype = Object.create(Being.prototype);
Monster.prototype.constructor = Monster;

("game" is the Phaser.Game instance and is a global variable, I didn't forget to pass it as an argument.)
I have looked at the examples and forum topics, and it seems to me that it's the proper way to do. Now if I create a new instance of Being, which inherits from Sprite, this works like a charm.

    var B = new Being(300,300,'player');

But if I try to make a new instance of Player, which inherits from Being which itself inherits from Sprite, the it doesn't work. The code is:

    var P = new Player(200,200,'player');

And in the console I get the following error: "phaser.js:15246 Uncaught TypeError: this.onTextureUpdate is not a function". This error makes the entire game crash.

I'm really puzzled by the fact that it works for Being, but not for Player, which seems to indicate that all this code is mostly correct, except that I must be doing something wrong with the "second-level" inheritance. Any help would be greatly appreciated!

Link to comment
Share on other sites

More specifically, Sprites need the game object (which is usually 'this' inside a state) in order to initialise most of their subsystems. This means all of your constructors need an additional parameter of 'game', and your instantiation statements should then be something like:

var B = new Being(game,300,300,'player');

... or...

var B = new Being(this,300,300,'player');

And when extending Being, make sure that the game reference is being passed also.

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...