Sign in to follow this  
Phyron

accessing parent object propieties

Recommended Posts

Hi, 

 

I have a code that you can see full code in this topic:

 

http://www.html5gamedevs.com/topic/8876-delete-sprite-in-group/

 

I have a object BasicGame, with propieties

 

BasicGame.Game = function (game) {this.powerIcons;this.ballLimit = 5;}BasicGame.Game.prototype = {crearNave: function () {    this.naveY = this.game.world.height-50;    this.nave = new NaveSprite( this.game,this.game.world.width/2, this.naveY);   }}  

Nave is a new object. 

var NaveSprite = function(game, _x, _y){    Phaser.Sprite.call(this,  game, _x, _y, 'nave',1);    this.game.physics.enable(this, Phaser.Physics.ARCADE);      this.enableBody = true;    this.body.immovable = true;    this.game.add.existing(this);    this.naveY = _y;}NaveSprite.prototype = Object.create(Phaser.Sprite.prototype);NaveSprite.prototype.constructor = NaveSprite;   NaveSprite.prototype.update = function() { this.naveY = ballLimit; //HERE I have to access the "ballLimit" var }

I need to acces a var of his parent (ballLimit), this is the problem.

 

I log window.BasicGame and console say:

BasicGame: Object   Boot: function (game) {   Game: function (game) {      arguments: null      caller: null      length: 1      name: ""      prototype: Object         applypower: function (){

I find applypower and other prototyped methods of basicgame, but cant find a propieties.

 

console.log(window.BasicGame.Game) returned the function, no the vars.

 

Share this post


Link to post
Share on other sites

This is a common source of confusion when working with object oriented style code in the early stages. There are several ways to do this, including making globally accessible properties, however that method is frowned upon. A better way to do this is to simply pass the parent object to the child objects (this is how Phaser makes the 'game' object available in many of its child objects) like so:

crearNave: function () {    this.naveY = this.game.world.height-50;    // Note the second argument is the state itself    this.nave = new NaveSprite(this.game, this, this.game.world.width/2, this.naveY);}

Then in your NaveSprite object:

var NaveSprite = function(game, state, _x, _y){    Phaser.Sprite.call(this, game, _x, _y, 'nave',1);    // Store a reference to the state that created this object here - this    // is not a copy, but a direct reference - if things change on the state    // they change in this property too.    this.state = state;    this.game.physics.enable(this, Phaser.Physics.ARCADE);      this.enableBody = true;    this.body.immovable = true;    this.game.add.existing(this);    this.naveY = _y;}NaveSprite.prototype = Object.create(Phaser.Sprite.prototype);NaveSprite.prototype.constructor = NaveSprite;   NaveSprite.prototype.update = function() {   this.naveY = this.state.ballLimit;}

Another way to do this would be to store the ballLimit property on the NaveSprite object as a 'static' like so:

var NaveSprite = function(game, _x, _y){    Phaser.Sprite.call(this, game, _x, _y, 'nave',1);    this.game.physics.enable(this, Phaser.Physics.ARCADE);      this.enableBody = true;    this.body.immovable = true;    this.game.add.existing(this);    this.naveY = _y;}NaveSprite.prototype = Object.create(Phaser.Sprite.prototype);NaveSprite.prototype.constructor = NaveSprite;// 'static' property, accessible globally but attached to the object it refers toNaveSprite.ballLimit = 5;   NaveSprite.prototype.update = function() {   this.naveY = NaveSprite.ballLimit;}

With this method you can access and alter NaveSprite.ballLimit anywhere in your code.

Share this post


Link to post
Share on other sites

THANKS!

 

Another problem I've found is with timer event.

 

This is an example:

if(power == 1){this.nave++;this.game.time.events.add(Phaser.Timer.SECOND * 4, this.deletePower, this);}if(power==2){this.nave--;this.game.time.events.add(Phaser.Timer.SECOND * 4, this.deletePower, this);}

this.deletePower has 2 identical if's: if power= 1 this.nave++, for restore state.

 

I need to pass a value to the deletePower function to know which destroy.

 

this.deletePower(power) send me a error.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.