import * as PIXI from 'pixi.js';
const app = new PIXI.Application({ resizeTo: window });
document.body.appendChild(app.view);
const brush = new PIXI.Graphics()
.beginFill(0xffffff)
.drawCircle(0, 0, 50);
const line = new PIXI.Graphics();
PIXI.Assets.add('t1', 'https://pixijs.com/assets/bg_grass.jpg');
PIXI.Assets.add('t2', 'https://pixijs.com/assets/bg_rotate.jpg');
PIXI.Assets.load(['t1', 't2']).then(setup);
function setup()
{
const { width, height } = app.screen;
const stageSize = { width, height };
const background = Object.assign(PIXI.Sprite.from('t1'), stageSize);
const imageToReveal = Object.assign(PIXI.Sprite.from('t2'), stageSize);
const renderTexture = PIXI.RenderTexture.create(stageSize);
const renderTextureSprite = new PIXI.Sprite(renderTexture);
imageToReveal.mask = renderTextureSprite;
app.stage.addChild(
background,
imageToReveal,
renderTextureSprite,
);
app.stage.eventMode = 'static';
app.stage.hitArea = app.screen;
app.stage
.on('pointerdown', pointerDown)
.on('pointerup', pointerUp)
.on('pointerupoutside', pointerUp)
.on('pointermove', pointerMove);
let dragging = false;
let lastDrawnPoint = null;
function pointerMove({ global: { x, y } })
{
if (dragging)
{
brush.position.set(x, y);
app.renderer.render(brush, {
renderTexture,
clear: false,
skipUpdateTransform: false,
});
if (lastDrawnPoint)
{
line
.clear()
.lineStyle({ width: 100, color: 0xffffff })
.moveTo(lastDrawnPoint.x, lastDrawnPoint.y)
.lineTo(x, y);
app.renderer.render(line, {
renderTexture,
clear: false,
skipUpdateTransform: false,
});
}
lastDrawnPoint = lastDrawnPoint || new PIXI.Point();
lastDrawnPoint.set(x, y);
}
}
function pointerDown(event)
{
dragging = true;
pointerMove(event);
}
function pointerUp(event)
{
dragging = false;
lastDrawnPoint = null;
}
}