Pixi.js 기본 도형 그린 후 회전하기
17 Apr 2022 | javascript html5화면에 도형 그룹 그린 후 회전하는 코드
<template> <div id="container"> <canvas id="pixi-canvas"></canvas> </div> </template> <script> import * as PIXI from "pixi.js"; import { onMounted } from "@vue/runtime-core"; export default { setup() { onMounted(() => { const app = createPixiApp(); const container = createContainerWithDrawingObjects(); app.stage.addChild(container); container.pivot.x = container.width / 2; container.pivot.y = container.height / 2; container.x = container.width / 2; container.y = container.height / 2; let elapsed = 0.0; app.ticker.add((delta) => { elapsed += delta; if (elapsed < 1) return; elapsed = 0; container.rotation = container.rotation + 0.01; }); }); const createPixiApp = () => { var canvas = document.getElementById("pixi-canvas"); const app = new PIXI.Application({ width: 800, height: 800, antialias: true, backgroundAlpha: true, view: canvas, }); return app; }; const createContainerWithDrawingObjects = () => { const container = new PIXI.Container(); const rect = new PIXI.Graphics(); rect.beginFill(0xff0000); rect.drawRect(50, 50, 200, 200); rect.endFill(); container.addChild(rect); const c1 = new PIXI.Graphics(); c1.lineStyle(0); c1.beginFill(0x008080); c1.drawCircle(400, 100, 50); c1.endFill(); container.addChild(c1); const c2 = new PIXI.Graphics(); c2.lineStyle(10, 0xfeeb77, 1); c2.beginFill(0x650a5a, 1); c2.drawCircle(400, 250, 50); c2.endFill(); container.addChild(c2); const polyline = new PIXI.Graphics(); polyline.lineStyle(10, 0x00ffff); polyline.moveTo(50, 350); polyline.lineTo(200, 350); polyline.lineTo(280, 400); polyline.lineTo(100, 450); container.addChild(polyline); const polygon = new PIXI.Graphics(); polygon.lineStyle(0); polygon.beginFill(0x3500fa, 1); polygon.moveTo(550, 70); polygon.lineTo(650, 160); polygon.lineTo(730, 120); polygon.lineTo(680, 270); polygon.lineTo(540, 220); polygon.closePath(); polygon.endFill(); container.addChild(polygon); return container; }; }, }; </script> <style> #container { display: block; background: white; padding: 20px; } #pixi-canvas { width: 600px; height: 600px; } </style>
Container를 회전하는 코드
여기서 중요한 부분은 아래 코드 부분입니다.
container.pivot
는 회전할 때의 중심 좌표를 의미합니다. 기본값은 0
이며, 이 경우 회전할 때 Container의 왼쪽상단 부분의 꼭지점을 기준으로 회전합니다.
그리고 pivot
를 Container의 중심으로 정하면, 화면에 좌표를 기준도 Container의 중심으로 변경됩니다. 따라서 기존과 같은 좌표에 도형을 그리기 위해서는 Container의 (x, y) 좌표를 변경할 필요가 있습니다.
container.pivot.x = container.width / 2; container.pivot.y = container.height / 2; container.x = container.width / 2; container.y = container.height / 2; let elapsed = 0.0; app.ticker.add((delta) => { elapsed += delta; if (elapsed < 1) return; elapsed = 0; container.rotation = container.rotation + 0.01; });
위에서
container.pivot.x = container.width / 2; container.pivot.y = container.height / 2; container.x = container.width / 2; container.y = container.height / 2;
코드는
container.pivot.set(container.width / 2, container.height / 2); container.position.set(container.width / 2, container.height / 2);
로도 작성 가능합니다.