Phaser 3 - Установить привязку графического объекта - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь установить точку привязки прямоугольного графического объекта в его центр, чтобы можно было вращать его вращение. Единственная связанная информация, которую я могу найти, говорит об использовании свойств dispalyOriginX и dispalyOriginY, но это, похоже, ничего не делает. Вот мой код:

export default class GameUi extends Phaser.GameObjects.Group {
  constructor(scene) {
    super(scene);

    let test = new Graphics(scene);
    test.setName('test');
    test.lineStyle(4, 0xffffff, 1);
    test.strokeRectShape(new Rectangle(100, 100, 75, 50));

    // The following doesn't work :(
    // test.displayOriginX = 0.5;
    // test.displayOriginY = 0.5;

    scene.tweens.add({
      targets: test,
      angle: 20,
      duration: 2000,
      ease: "Power2",
      yoyo: true,
      loop: -1
    });

    this.addMultiple([test], true);
  }
}

Прямоугольник должен вращаться вокруг своего центра, но, как вы можете видеть на изображении ниже, он, кажется, вращается вокруг верхнего левого угла игровой области. Я попытался свойства displayOrigin со значениями от 0,5 до 500, все с тем же результатом.

enter image description here

Я думал, что это может быть, потому что я добавив прямоугольник в группу, которая вызывает проблему, но я пытался не добавлять его в группу с тем же эффектом. Вот как выглядел мой код, когда он не был частью группы:

export default class GameUi {
  constructor(scene) {
    let test = scene.add.graphics();
    // the rest stays the same as in my first code example
  }
}

1 Ответ

1 голос
/ 23 февраля 2020

Я не знаю, каков ваш класс Rectangle, но я предполагаю, что это расширение Phaser.graphics?

Если это так, вам нужно вызвать метод setOrigin для вашего экземпляра прямоугольника.

tempRect = new Rectangle(100, 100, 75, 50) # create
tempRect.setOrigin(tempRect.halfWidth, tempRect.halfHeight) // Set origin to middle point

test.strokeRectShape(tempRect);

...