保存鼠标位置,然后再更新一个值

时间:2018-11-12 04:11:15

标签: javascript phaser-framework

我正在使用Phaser引擎,我希望在单击和保持事件上从鼠标的初始位置绘制一条线,并使其不断更新以随着鼠标移动而绘制到鼠标位置。我的问题是,当我尝试存储鼠标的初始位置时,它一直在变化。这似乎是一个简单的问题,但是我对这个东西不是很好。这是代码:

var unitLine;
if(game.input.activePointer.isDown) {
    const firstX = game.input.x;
    const firstY = game.input.y;
    unitLine = game.add.graphics(100, 100);
    unitLine.beginFill(0xFF3300);
    unitLine.lineStyle(10, 0xffd900, 1);

    unitLine.moveTo(firstX, firstY);
    unitLine.lineTo(game.input.x, game.input.y);
}

即使我将它们声明为const,firstX和firstY也在发生变化。不知道该怎么办。

2 个答案:

答案 0 :(得分:2)

问题在于,每当鼠标firstX设置firstYisDown时,基本上就覆盖了鼠标按下的每一帧。

要解决此问题,请尝试使用Phaser的game.input.onDown函数:

var game = new Phaser.Game(500, 500, Phaser.CANVAS, 'test', {
  preload: preload,
  create: create,
  update: update
});

function preload() {}

let firstX;
let firstY;

function create() {
  game.input.onDown.add(function() {
    firstX = game.input.x;
    firstY = game.input.y;
  }, this);
}
var unitLine;

function update() {
  if (game.input.activePointer.isDown) {
    unitLine = game.add.graphics(0, 0);
    unitLine.beginFill(0xFF3300);
    unitLine.lineStyle(10, 0xffd900, 1);

    unitLine.moveTo(firstX, firstY);
    unitLine.lineTo(game.input.x, game.input.y);
  }
}
<script src="https://github.com/photonstorm/phaser-ce/releases/download/v2.11.1/phaser.min.js"></script>

(而且,我不得不将100, 100更改为0, 0

答案 1 :(得分:0)

这是因为您要在语句中声明它们,因此每次都会重新单击该声明,并且将重新创建变量。

正确地,您需要在语句之外创建变量。

然后,要解决您的问题,我将使用布尔值将其锁定。

类似这样的东西:

var unitLine;
var firstX;
var firstY;
var needToset_XY = true;

if(game.input.activePointer.isDown) {

    if(needToset_XY){
        firstX = game.input.x;
        firstY = game.input.y;
        needToset_XY = false;
    }

    unitLine = game.add.graphics(100, 100);
    unitLine.beginFill(0xFF3300);
    unitLine.lineStyle(10, 0xffd900, 1);

    unitLine.moveTo(firstX, firstY);
    unitLine.lineTo(game.input.x, game.input.y);
}

这意味着在第一次之后不能更改firstX和firstY值。

如果这一切都在游戏循环中,则需要在循环之外声明前四个变量,否则它们将每次更新。