Сохраните местоположение мыши, затем обновите второе значение - PullRequest
0 голосов
/ 12 ноября 2018

Я использую движок 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);
}

что firstX и firstY меняются, даже когда я объявляю их как const. Не уверен, что здесь делать.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Проблема в том, что вы устанавливаете firstX и firstY всякий раз, когда мышь isDown, поэтому они в основном перезаписывают каждый кадр, когда мышь не работает.

Чтобы обойти это, попробуйте использовать функцию 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)

0 голосов
/ 12 ноября 2018

Это потому, что вы объявляете их в операторе, поэтому объявление каждый раз создается заново, а переменные создаются заново.

Во-первых, вам нужно создать переменные вне оператора.

А потом, чтобы исправить вашу проблему, я бы использовал bool для их блокировки.

Примерно так:

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 не могут быть изменены после первого раза.

Если это все в игровом цикле, вам нужно объявить четыре верхние переменные вне цикла, иначе они будут обновляться каждый раз.

...