Jump to content

Handling "this" in helper objects


maximinus
 Share

Recommended Posts

I'm using Phaser 3 + ES6

I have a class defined in the normal way for a scene:

 

class TerminalScene extends Phaser.Scene {
    ...
};

Now I want to add a helper class of my own to manage some aspect. For instance, I have a class that handles some text displaying. But this class needs access to function this.add.text. For the moment I do this:

class SomeExample {
    constructor(func_add_text) {
        this.add_text = func_add_text;
    }

    add(string) {
        func_add_text(......);
    }
};


// to call the add function in SomeExample:

var my_class_instance = new SomeExample(this.add.text.bind(this.add));
my_class_instance.add('Hello, World');

There must be a better way of doing this. In other libraries, I would have access to the function by importing. What am I missing?

Link to comment
Share on other sites

Scene.add is already a helper plugin that adds common GameObjects to the scene it pertains to.

Given the heavy focus Phaser 3 has on scenes, almost all your classes will need the scene as a parameter for the constructor. That way you can add objects with the add function:

class MyObject {
	constructor(scene) {
		scene.add.image(0,0,'foo')
	}
}

Or add them with add.existing, which you will need if you are creating classes that extend any GameObject:

class MyObject {
	constructor(scene) {
		let image = new Phaser.GameObjects.Image(scene, 0, 0, 'foo')
		scene.add.existing(image)
	}
}
class MyObject extends Phaser.GameObjects.Image {
	constructor(scene, x, y, key, frame) {
		super(scene, x, y, key, frame)
		scene.add.existing(this)
	}
}
Link to comment
Share on other sites

class SomeExample {
    constructor(func_add_text) {
        this.add_text = func_add_text;
    }

    add(string) {
        return this.add_text(......);
    }
};


// to call the add function in SomeExample:

var my_class_instance = new SomeExample(this.add.text);
my_class_instance.add('Hello, World');

or

class SomeExample {
    constructor(func_add_text, scope) {
        this.add_text = func_add_text;
this.scope = scope
    }

    add(string) {
        this.add_text.call(this.scope, string)
    }
};


// to call the add function in SomeExample:

var my_class_instance = new SomeExample(add.text, this);
my_class_instance.add('Hello, World');

 

Link to comment
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...
 Share

  • Recently Browsing   0 members

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