前面一小節(jié),我們講了鍵盤輸入俊戳,這里補充一下關(guān)于鼠標的揖赴。
鍵盤事件是通過Phaser.Scene.input.keyboard.on()方法添加事件監(jiān)聽器的,但是鼠標事件和部分其它事件抑胎,則是通過Phaser.Scene.input.on()方法來添加事件監(jiān)聽器的燥滑。
在鼠標事件中,雖然本教程中稱為鼠標事件阿逃,但是具體指的是點擊事件铭拧,在PC端就是使用鼠標點擊,在移動端就是用手指點擊盆昙。因此,在Phaser中焊虏,該事件不稱為mouse淡喜,而是pointer。例如pointerdown就是按下鼠標的事件诵闭。
局部事件
通過Phaser.Scene.input來添加的事件都是全局事件炼团,也就是說無論點擊哪一個GameObject或者點外面,都會觸發(fā)該事件疏尿。而局部事件是指只有操作特定GameObject才會觸發(fā)的事件瘟芝。
每一個GameObject對象,都有setInteractive()方法褥琐,局部輸入默認不啟用锌俱,該方法用于啟用局部輸入系統(tǒng),它可以傳入一個配置參數(shù)敌呈,也可以不傳入贸宏。
每一個GameObject都有on()方法和once()方法造寝,用于添加局部事件監(jiān)聽器,它們有三個參數(shù)吭练,第一個參數(shù)是事件诫龙,如果是點擊事件,那么第二鲫咽、三個參數(shù)是點擊位置的坐標签赃。
在輸入系統(tǒng)中,on()方法是指添加每次事件發(fā)生時都會運行的函數(shù)分尸,而once()方法中傳入的函數(shù)只會在事件第一次被觸發(fā)時運行锦聊。
切換場景
可以通過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類的構(gòu)造方法中,在調(diào)用基類構(gòu)造方法時沒有傳入?yún)?shù)仰税,那么默認該場景是沒有激活的)构资。在S1類的輸入處理中,我們調(diào)用了start()方法激活一個場景陨簇,因此點擊S1場景中的任意一處吐绵,就會切換到S2場景了。
start()方法中河绽,第一個參數(shù)為場景的鍵己单。該方法會禁用當(dāng)前場景,然后激活新場景耙饰。