前面一小节,我们讲了键盘输入,这里补充一下关于鼠标的。
键盘事件是通过Phaser.Scene.input.keyboard.on()方法添加事件监听器的,但是鼠标事件和部分其它事件,则是通过Phaser.Scene.input.on()方法来添加事件监听器的。
在鼠标事件中,虽然本教程中称为鼠标事件,但是具体指的是点击事件,在PC端就是使用鼠标点击,在移动端就是用手指点击。因此,在Phaser中,该事件不称为mouse,而是pointer。例如pointerdown就是按下鼠标的事件。
局部事件
通过Phaser.Scene.input来添加的事件都是全局事件,也就是说无论点击哪一个GameObject或者点外面,都会触发该事件。而局部事件是指只有操作特定GameObject才会触发的事件。
每一个GameObject对象,都有setInteractive()方法,局部输入默认不启用,该方法用于启用局部输入系统,它可以传入一个配置参数,也可以不传入。
每一个GameObject都有on()方法和once()方法,用于添加局部事件监听器,它们有三个参数,第一个参数是事件,如果是点击事件,那么第二、三个参数是点击位置的坐标。
在输入系统中,on()方法是指添加每次事件发生时都会运行的函数,而once()方法中传入的函数只会在事件第一次被触发时运行。
切换场景
可以通过Phaser.Scene.scene.start()方法切换场景。
一个例子
class S1 extends Phaser.Scene{
constructor(){
super({active:true});
}
create(){
this.add.text(0,0,"The First Scene");
this.input.on("pointerdown",(e)=>this.scene.start("S2"));
}
}
class S2 extends Phaser.Scene{
constructor(){
super();
}
create(){
this.add.text(0,0,"The Second Scene");
}
}
class Game extends Phaser.Game{
constructor(){
super({type:Phaser.AUTO,width:window.innerWidth,height:window.innerHeight,physics:{default:"arcade"}});
let s1=new S1();
let s2=new S2();
this.scene.add("S1",s1);
this.scene.add("S2",s2);
}
}
运行上述代码后,显示所有激活的场景(这里需要对前面的文章指正一下,默认是运行所有激活的场景,而不是第一个被添加的场景,因此,这里S2类的构造方法中,在调用基类构造方法时没有传入参数,那么默认该场景是没有激活的)。在S1类的输入处理中,我们调用了start()方法激活一个场景,因此点击S1场景中的任意一处,就会切换到S2场景了。
start()方法中,第一个参数为场景的键。该方法会禁用当前场景,然后激活新场景。
网友评论