如何在 PIXI.js 中绘制同一图元的多个实例?

How to draw multiple instances of the same primitive in PIXI.js?

我调用一个 "primitive" 使用 drawCircle()、drawRect() 渲染的对象,...

考虑到:

  1. 图元的位置发生变化(有约束(1)
  2. 基元*表示的对象经常created/destroyed

在不同位置绘制相同图元的多个实例的最快方法是什么:

为了清楚起见,如果我使用 drawCircle() 简单地渲染了子弹,并且知道我在每一帧都收到了游戏的完整状态(即约束 (1)), 渲染它们的最快方法是什么?

(1):我知道 t 子弹 1 是在位置 p1 并且瞬间 t+1 子弹 1 在位置 p2。但是我 do 知道在瞬间 t 位置 p1 和瞬间 t+1 p2.

位置有一颗子弹

我会选择选项 3:另一个解决方案。

通常最好尽可能使用位图精灵,因为它们针对 GPU 进行了更优化。 (更多信息在这里 https://github.com/pixijs/pixi.js/issues/1390

您可以轻松地将原始图形渲染成可重复使用的纹理。

// Render a circle to a texture
var texture = new PIXI.RenderTexture(renderer, 16, 16);
var graphics = new PIXI.Graphics();
graphics.beginFill(0x44FFFF);
graphics.drawCircle(8, 8, 8);
graphics.endFill();
texture.render(graphics);

然后从纹理创建精灵

var s = new PIXI.Sprite(texture);

这是一个从单个纹理创建多个精灵的示例。

http://jsfiddle.net/gzh14bcn/

请注意这段代码甚至不需要更新函数来重绘每一帧。您只需在最后渲染一次舞台。

因此,如果您有多颗子弹,您只需为每颗子弹创建一个 Sprite 并在它移动时更新它的位置。一旦它离开屏幕,删除对它的引用,GC 将清理它。

如果您想进一步优化,您应该考虑为您的项目符号使用对象池。 https://en.wikipedia.org/wiki/Object_pool_pattern