Clear Pixi.js Graphics Instance for Redrawing
In Pixi.js, managing and updating visual shapes dynamically is a
common requirement for interactive applications and games. This article
provides a straightforward guide on how to clear previously drawn shapes
from a PIXI.Graphics instance and redraw new ones using the
built-in clear() method, ensuring optimal rendering
performance without leaking memory.
To remove previously drawn shapes from a Graphics object in Pixi.js,
you must call the clear() method on that specific instance.
This method resets the graphics buffer, erasing all paths, fills, and
strokes associated with the object, allowing you to define new geometry
immediately afterward.
Code Example
Here is a basic implementation demonstrating how to draw a shape, clear it, and then redraw a new shape on the same Graphics instance:
import * as PIXI from 'pixi.js';
// 1. Create the Pixi.js Application and Graphics instance
const app = new PIXI.Application({ width: 800, height: 600 });
document.body.appendChild(app.view);
const graphics = new PIXI.Graphics();
app.stage.addChild(graphics);
// 2. Draw an initial shape (a red rectangle)
graphics.beginFill(0xFF0000);
graphics.drawRect(50, 50, 100, 100);
graphics.endFill();
// 3. Clear the graphics instance to remove the red rectangle
graphics.clear();
// 4. Redraw a new shape (a blue circle) on the same instance
graphics.beginFill(0x0000FF);
graphics.drawCircle(200, 200, 50);
graphics.endFill();Why Use
clear() Instead of Creating New Instances?
Reusing a single PIXI.Graphics instance by calling
clear() is significantly more efficient than destroying the
old instance and instantiating a new one. Creating new objects
frequently triggers garbage collection, which can cause noticeable
stuttering or frame drops in web browsers.
Best Practices for Dynamic Redrawing
When updating shapes inside a game loop or an animation ticker,
always call clear() at the beginning of the update step
before applying the new drawing commands.
app.ticker.add(() => {
// Clear the canvas of previous frame's drawings
graphics.clear();
// Draw the updated frame content
graphics.beginFill(0x00FF00);
graphics.drawCircle(character.x, character.y, 20);
graphics.endFill();
});By maintaining a single Graphics reference and utilizing
clear(), you keep the GPU memory clean and ensure smooth
rendering transitions.