美文网首页
Phaser3 ES6+ 入门教程(3)——输入系统(2)

Phaser3 ES6+ 入门教程(3)——输入系统(2)

作者: 遨游于学海 | 来源:发表于2023-01-22 13:39 被阅读0次

    前面一小节,我们讲了键盘输入,这里补充一下关于鼠标的。
    键盘事件是通过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()方法中,第一个参数为场景的键。该方法会禁用当前场景,然后激活新场景。

    相关文章

      网友评论

          本文标题:Phaser3 ES6+ 入门教程(3)——输入系统(2)

          本文链接:https://www.haomeiwen.com/subject/kfcqurtx.html