【问题标题】:Phaser, make a button click event continuousPhaser,使按钮单击事件连续
【发布时间】:2015-11-30 22:11:48
【问题描述】:

我正在使用 Phaser.js 创建地图(tileSprite)并在其上放置一些精灵,因为并非所有精灵都能进入,我正在使用相机左右平移。

我希望用户单击键盘键(左或右)或方向按钮精灵来连续平移相机,直到用户释放控件。

我已经实现了类似于this example 的键盘平移,我按住一个键,相机移动/平移(在事件中每边 10 个像素)并在按键释放时停止。

但是,当我尝试使用 2 个精灵按钮实现相同的功能时,每个按钮仅触发 1 个事件,并且每次点击仅平移相机 10 像素。我需要一直开火,直到我松开钥匙。

var panRightButton = game.add.button(800, 5, 'right_pan_btn', onClickAction, this);
    panRightButton.onInputOver.add(onButtonOver, this);
    panRightButton.onInputOut.add(onButtonOut, this);
    panRightButton.onInputDown.add(panScreenRight, this);

    function panScreenRight() {
        game.camera.x += 10;
    }

我尝试使用布尔标志 (isPanning),如果我单击按钮,该标志将变为真,而在释放时变为假。并在game.camera.x += 10; 上有一个while 循环,但它只是减慢并停止了脚本。

function onClickAction() {
     isPanning = true;
}

function onButtonOut() {
      isPanning = false;
}

function onButtonUp() {
      isPanning = false;
}

function panScreenLeft() {
    if (isPanning) {
         game.camera.x -= 10;
    }
}

【问题讨论】:

    标签: javascript phaser-framework


    【解决方案1】:

    正确的方法是使用update 方法,但不是在循环中。使用标志来知道按钮是否被按下是可以的,但只需让 Phaser 更新相机位置,就像在您链接的示例中一样:

    function update() {
    
        //...
    
        if (isPanningLeft) {
            game.camera.x -= 10;
        } else if (isPanningRight) {
            game.camera.x += 10;
        }
    
       //...
    }
    

    您不需要循环,因为update 方法是在循环中执行的(并且预计会逐帧执行一次)

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 2014-02-17
      • 1970-01-01
      • 2020-09-09
      相关资源
      最近更新 更多