Référence d'attributs et de méthodes dans une classe
Bonjour à tous
Je suis en train de tester la librairie Phaser3 et je me retrouve face à un problème qui me semble plus général, concernant javascript.
J'arrive à faire tourner le code ci-dessous, mais à condition de rendre global certaines varables et fonctions, alors que je souhaite les inclure dans la classe.
Par exemple, en prenant le cas de l'attribut count de la classe (défini par "this.count=0;" dans le constructeur) :
je veux l'incrémenter à l'intérieur de la fonction de rappel (callback) de sprite1.on. Mais celà ne fonctionne pas. En faisant des tests, j'en ai déduis que le this.count à l'intérieur de la callback ne fait pas référence au count de la classe. Par contre si je l'externalise, en mettant en première ligne "var count=0;", avant de définir la classe (et en remplaçant bien sûr tous les this.count par count), ça marchera.
Le problème est visiblement le même pour le "this.scene.start('sceneB');" à l'intérieur de la callback de this.button1.on, ainsi que pour la méthode onEvent1() et le timedEvent1.
Quelqu'un aurait-il une idée, sûr comment faire référence au count de la classe à l'intérieur de la callback ?
En vous remerciant par avance pour vos idées.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class sceneA extends Phaser.Scene{
constructor(){
super({key: 'sceneA' });
this.count = 0;
}
preload () { this.load.image('sprite1','assets/sprite1.png');
this.load.image('button1','assets/button1.png');
}
create () { var sprite1 = this.physics.add.sprite(50 , 50, 'sprite1').setInteractive().setScale(1.5);
sprite1.on('pointerdown', function () { sprite.setVelocityY(-200); this.count++;});
this.button = this.add.sprite(350, 360, 'demarrer').setInteractive();
this.button.visible = false;
this.button.on('pointerdown',function () { this.scene.start('sceneB'); });
var timedEvent1 = this.time.addEvent({delay : 12000, callback:this.onEvent1, callbackScope:this,repeat:0});
}
update () {
if (this.count>=8) { this.boutton.visible = true;
};
}
onEvent1 { this.texte1 = this.add.text(100, 100, 'Hello !',{fontFamily: 'Arial', fontSize: '32px', fill: '#228B22' });
this.count++;
}
} |