【Phaser】Phaser監聽鍵盤WASD按下事件

應開發一個簡單的H5小遊戲需要,使用了H5遊戲框架Phaser,如果手寫各種效果代碼,怕是要寫到頭禿,因此必須借用網上開源的引擎了。

Phaser GitHub地址:https://github.com/photonstorm/phaser

Phaser 國內粉絲文檔、論壇小站:https://www.phaser-china.com/

根據官方Demo案例接星星(collectStar)改編代碼

源代碼在:https://github.com/channingbreeze/games

個人需求:

1.需要兩個精靈進行對戰

2.兩個精靈分別使用WASD 和 ↑←↓→進行控制

遇到問題:

1.因爲剛剛接觸Phaser,Demo中使用的

game.input.keyboard.createCursorKeys()

僅能獲取到 up/left/down/right 的按鍵事件

2.因爲代碼問題,需要監聽按下事件和取消按下事件,否則精靈不是一幀一幀的動,而是會滑行

解決方式:

1.方向鍵的監聽方式沒有改動,仍然使用

            //創建按鍵方向 ↑←↓→
            cursors=game.input.keyboard.createCursorKeys();

而WASD則使用

            //創建WASD按鍵
            A = game.input.keyboard.addKey(Phaser.Keyboard.A);
            D = game.input.keyboard.addKey(Phaser.Keyboard.D);

2.將player1和player2的監聽判斷分開,都進行如果沒按下的控制

詳細script代碼爲(部分已省略)

    <script>
        var game = new Phaser.Game(800,600,Phaser.CANVAS,'parent',{
            preload:preload,//資源預加載
            create:create,//創建場景
            update:update//邏輯實現
        });
        function preload() {
            console.log('資源加載');
            。。。
        }
        var player1;//用戶一
        var player2;//用戶二
        var cursors;//輸入
        var A;//鍵盤A
        var D;//鍵盤D
        function create() {
            console.log('創建場景')
            。。。
            //創建按鍵方向 ↑←↓→
            cursors=game.input.keyboard.createCursorKeys();
            //創建WASD按鍵
            A = game.input.keyboard.addKey(Phaser.Keyboard.A);
            D = game.input.keyboard.addKey(Phaser.Keyboard.D);
        }
        function update() {
            console.log('遊戲循環');
            。。。
            //player1使用上下左右
            if (cursors.left.isDown) {
                player1.body.velocity.x=-150;
                player1.animations.play('left');
            } else if (cursors.right.isDown) {
                player1.body.velocity.x=150;
                player1.animations.play('right');
            } else {
                player1.bame=4;//精靈圖第4幀
                player1.body.velocity.x=0;//加上這個判斷則每按一次運動一次否則直接滑翔
            }
            //player2操作:AD
            if (A.isDown) {
                player2.body.velocity.x=-150;
                player2.animations.play('left');
            } else if (D.isDown) {
                player2.body.velocity.x=150;
                player2.animations.play('right');
            } else {
                player2.body.velocity.x=0;//加上這個判斷每沒按一次運動一次否則直接滑翔
                player2.frame=4;//精靈圖第4幀
            }

        }
    </script>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章