如何在pixijs中使用绝对坐标

How to use absolute coords in pixijs

我的问题是关于使用绝对坐标移动直线和矩形。

  1. 我创建了行:
const line = new PIXI.Graphics();
line.lineStyle(2, 0xffffff);
line.moveTo(100, 200);
line.lineTo(300, 200);
app.stage.addChild(line);

但是如果我尝试通过更改 x/y 来设置坐标,它将相对于创建的位置:

line.x = 200; // real x will be 300
line.y = 200; // real y will be 400

如果要在视图上设置绝对坐标,应该如何移动这条线? 我应该始终使用电流计算绝对坐标吗?

  1. 关于rect的同样问题,我是这样创建的:
const blueBox = new PIXI.Graphics();
blueBox.beginFill(0x0000ff);
blueBox.drawRect(50, 50, 50, 50);
blueBox.endFill();
app.stage.addChild(blueBox);

如果我尝试使用 x/y 移动它,我会像行一样做 - x/y 是相对的,好的。 我总是可以在 0/0 点绘制矩形然后移动它们,但它的设计是否正确,还有其他方法吗?

作为一般规则,如果 Graphics 对象在视觉上没有变化,则不应触发重绘。这是一项计算量大的操作,仅仅重新定位对象并不能证明调用它是合理的。

更好的替代方法是使用局部坐标绘制直线或矩形,然后通过设置 position 属性 将其放置在目标绝对位置。我更喜欢将 (0, 0) 作为形状的中心,但选择 top-left 角或任何其他参考点也是有效的。对于矩形,它看起来像这样:

const blueBox = new PIXI.Graphics();
blueBox.beginFill(0x0000ff);
blueBox.drawRect(-25, -25, 50, 50);
blueBox.endFill();
blueBox.position.set(25, 25);
app.stage.addChild(blueBox);

从这一点开始,对矩形绝对位置的所有更改都应该通过更改位置 属性 而发生,而不是通过使用新坐标重新绘制图形。