在 PIXI.js 中正确设置简单图形的动画

Animating a simple graphic correctly in PIXI.js

我在 PIXI 中有一个图形,我想通过流动过渡将其简单地扩展到左侧。研究官方文档,我没有真正找到任何最佳实践或在这里做什么。

我的代码目前看起来像这样

var bar = new PIXI.Graphics();
bar.beginFill(color);
bar.lineStyle(1, 0x000000, 10);
bar.drawRect(
  my_x,
  my_y * line,
  bar_width,
  bar_height
);

并以最终形状正确显示条形。我现在的问题是如何从 0 慢慢扩展它。

我尝试通过 bar.length = final_pos 给栏一个新的位置,但它立即改变了。

请查看我对 Pixi.js 中关于动画基元/形状的类似问题的回答:。在那里,我展示了如何为多边形设置动画(drawPolygon 方法)——但类似地,您可以使用矩形 (drawRect).

主要思想是在 "main loop" 的每次迭代中执行以下操作:

  1. 使用所需参数(位置、顶点位置、大小、颜色等)创建形状。
  2. 将此形状添加到您的舞台(直接到舞台或舞台上的某个容器)。
  3. 渲染阶段。
  4. 从舞台(或容器 - 如果已添加到其他容器)中删除此形状。
    • 这还应该允许垃圾收集器从内存中清除该对象 - 因此在该循环一段时间后内存将不会填满 运行。
  5. 更改一些参数,以便在下一次迭代中创建的第 1 点略有不同。

感谢@domis86 和@PAEz,我尝试实现它并将其改进为以下代码。我用了遮罩,但它应该也可以直接调整宽度。

var mask_width = 0;
var loading_bar = setInterval(function () {
  if (mask_width < bar_width) {
    var this_mask = new PIXI.Graphics();
    this_mask.beginFill(0xff3300);
    this_mask.drawRect(my_x, my_y * line, bar_width, bar_height);
    this_mask.endFill();
    bar.mask = this_mask;
    mask_width += 1;
  } else {
    bar.mask = null;
    clearInterval(loading_bar);
  }
}, 10);

此代码应用一个新掩码,每 10 毫秒覆盖范围略有增加,直到达到完整宽度。