PixiJS ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑ ์์
- HTML ํ์ผ ๋ง๋ค๊ธฐ
- ์น ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ์ ๊ณต
- PixiJS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋
- ์์ฉ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
- ์์ฑ ๋๋ณด๊ธฐ๋ฅผ DOM์ ์ถ๊ฐ
- ์คํ ์ด์ง์ ์ด๋ฏธ์ง ์ถ๊ฐ
- ์ ๋ฐ์ดํธ ๋ฃจํ ์์ฑ
ํ์ผ ์ ๊ณต
PixiJS๋ก ๋ก์ปฌ๋ก ๊ฐ๋ฐํ๋ ค๋ฉด ์น ์๋ฒ๋ฅผ ์คํํด์ผํฉ๋๋ค. ์น ๋ธ๋ผ์ฐ์ ๋ ๋ก์ปฌ๋ก ๋ก๋๋ ์น ํ์ด์ง์ ๋ก์ปฌ ํ์ผ(์: ์ด๋ฏธ์ง ๋ฐ ์ค๋์ค ํ์ผ)์ ๋ก๋ํ์ง ๋ชปํ๋๋ก ํฉ๋๋ค. ์ HTML ํ์ผ์ ๋ ๋ฒ ํด๋ฆญํ๊ธฐ๋ง ํ๋ฉด PixiJS ๋จ๊ณ์ ์คํ๋ผ์ดํธ๋ฅผ ์ถ๊ฐํ๋ ค๊ณ ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
XAMPP ๋๋ http-server Node.js ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ฝ๊ฒ ์ ๊ณต ํ ์ ์์ต๋๋ค.
์ ํํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ ์์น ํ์ ์ค์ ์ ๋ ฅํ์ฌ ๋ชจ๋ ๊ฒ์ด ์๋ํ๋์ง ํ ์คํธํ์ญ์์ค. (๋ชฝ๊ตฌ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํธ 8080์์ ํ์ผ์ ์ ๊ณตํฉ๋๋ค.) "Hello PixiJS"์ ๋ค๋ฅธ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด ๋จ๊ณ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํ์ผ ์ด๋ฆ์ ์ง์ ํ์ง ์์๊ฑฐ๋ ์น ์๋ฒ๋ฅผ ์๋ชป ๊ตฌ์ฑํ์์ ์๋ฏธํฉ๋๋ค.http://127.0.0.1:8080index.html
-> ๋ธ๋ก๊ทธ ์ฃผ์ธ์ฅ ๊ฐ์ ๊ฒฝ์ฐ์๋ ํ์ด์ฌ์ผ๋ก ์๋ฒ ๊ตฌ์ฑ
python -m SimpleHTTPServer 8000 ์ค๋ฅ — My dev Note๐ (tistory.com)
python -m SimpleHTTPServer 8000 ์ค๋ฅ
python -m SimpleHTTPServer 8000 ๋ฅผ ํฐ๋ฏธ๋์ ์ณค์ ๋ No module named SimpleHTTPServer ๋ผ๋ ์๋ฌ๋ฉ์์ง๋ฅผ ๋ฐ๋ ์ด์์ ๋ํ ํด๊ฒฐ์ ์๋ ๋ธ๋ก๊ทธ ํ์ด์ฌ(python)์ ์ด์ฉํ ๊ฐ๋จํ ํ์ผ ์๋ฒ ๋ช ๋ น (daum.net) ํ..
rainbowcode.tistory.com
PixiJS ๋ก๋ฉ
๋น์ด์๋ ์นํ์ด์ง์ PixiJS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ก๋. ์ค์ ์์ฉ ์ด ์ค์ ํ์ผ ์น์ ์ ์ถ๊ฐ
<script src="https://pixijs.download/release/pixi.js"></script>
์ฌ๊ธฐ์๋ ํ์ด์ง๊ฐ๋ก๋ ๋ ๋ PixiJS์ ์ต์ ๋ฒ์ ์ ์ถ์๋์ง ์์ ๋ฒ์ ์ด ํฌํจ๋๋ฉฐ ์ฌ์ฉํ ์ค๋น. ๊ฐ๋ฐ ์ค์ด๊ธฐ ๋๋ฌธ์ ์ถ์๋์ง ์์ ๋ฒ์ ์ ์ฌ์ฉ.
์์ฉ ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
๋ค์ ๋จ๊ณ๋ PixiJS๋ฅผ ์์ํ๋ ๊ฒ
<script>
let app = new PIXI.Application({ width: 640, height: 360 });
</script>
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ๋ธ๋ก์ ์ถ๊ฐํ๊ณ , ๊ทธ ๋ธ๋ก์ ์๋ก์ด PICI๋ฅผ ๋ง๋๋ ๊ฒ. ์์ฉ ํ๋ก๊ทธ๋จ ์ธ์คํด์ค. ์์ฉ ํ๋ก๊ทธ๋จ์ PixiJS๋ก ์์ ์ ๋จ์ํํ๋ ๋์ฐ๋ฏธ ํด๋์ค. ๋ ๋๋ฌ๋ฅผ ๋ง๋ค๊ณ , ์คํ ์ด์ง๋ฅผ ๋ง๋ค๊ณ , ์ ๋ฐ์ดํธ๋ฅผ ์ํ ํฐ์ปค๋ฅผ ์์.
DOM์ ๋ทฐ ์ถ๊ฐ
๋ PIXI. ์์ฉ ํ๋ก๊ทธ๋จ ํด๋์ค๋ ๋ ๋๋ฌ๋ฅผ ๋ง๋ค๊ณ ๋ ๋๋งํ Canvas ์์๋ฅผ ๋น๋. PixiJS๋ก ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋ณด๋ ค๋ฉด ์ด Canvas ์์๋ฅผ ์น ํ์ด์ง์ DOM์ ์ถ๊ฐ. ํ์ด์ง์ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ๋ค์ ์ค์ ์ถ๊ฐ
document.body.appendChild(app.view);
์ด๋ ๊ฒ ํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ง๋ ๋ณด๊ธฐ(Canvas ์์)๋ฅผ ๊ฐ์ ธ์ ํ์ด์ง ๋ณธ๋ฌธ์ ์ถ๊ฐ
์คํ๋ผ์ดํธ ๋ง๋ค๊ธฐ
์์ง๊น์ง๋ ์ค๋น๋จ๊ณ... PixiJS์๊ฒ ์๋ฌด๊ฒ๋ ๊ทธ๋ฆฌ๋ผ๊ณ ๋งํ์ง ์์๋ค.
ํ์ ํ ์ด๋ฏธ์ง๋ฅผ ์ถ๊ฐํ์ฌ ์ด๋ฅผ ์์ .
PixiJS์์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ง๋ง ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์คํ๋ผ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ.
์ง๊ธ์ PixiJS๊ฐ DisplayObjects์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ ๋๋งํ๋ค๋ ๊ฒ๋ง ์๊ณ ์์ด์ผํ๋ค. ์คํ๋ผ์ดํธ๋ ๋ก๋๋ ์ด๋ฏธ์ง ๋ฆฌ์์ค๋ฅผ ๋ํํ์ฌ ๊ทธ๋ฆฌ๊ธฐ, ํฌ๊ธฐ ์กฐ์ , ํ์ ๋ฑ์ ํ์ฉํ๋ DisplayObject ์ ํ.
PixiJS๊ฐ ์ด๋ฏธ์ง๋ฅผ ๋ ๋๋งํ๊ธฐ ์ ์ ๋ก๋ํด์ผํ๋ค. ๋ค๋ฅธ ์น ํ์ด์ง์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฏธ์ง๋ก๋๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์.
์ง๊ธ์ PICI์์ ๋์ฐ๋ฏธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฏธ์ง๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ์คํ๋ผ์ดํธ ํด๋์ค :
// Magically load the PNG asynchronously
let sprite = PIXI.Sprite.from('sample.png');
์คํ ์ด์ง์ ์คํ๋ผ์ดํธ ์ถ๊ฐ
๋ง์ง๋ง์ผ๋ก ์ ์คํ๋ผ์ดํธ๋ฅผ ์คํ ์ด์ง์ ์ถ๊ฐ. ์คํ ์ด์ง๋ ๋จ์ํ ์ฅ๋ฉด ๊ทธ๋ํ์ ๋ฃจํธ์ธ ์ปจํ ์ด๋. ์คํ ์ด์ง ์ปจํ ์ด๋์ ๋ชจ๋ ์์์ ๋ชจ๋ ํ๋ ์์ ๋ ๋๋ง๋ฉ๋๋ค. ์คํ๋ผ์ดํธ๋ฅผ ์คํ ์ด์ง์ ์ถ๊ฐํจ์ผ๋ก์จ PixiJS์ ๋ ๋๋ฌ์๊ฒ ๊ทธ๋ฆด ๊ฒ์ ์๋ ค์ค๋๋ค.
app.stage.addChild(sprite);
์ ๋ฐ์ดํธ ๋ฃจํ ์์ฑ
์ ์ ์ปจํ ์ธ ์๋ PixiJS๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๋๋ถ๋ถ์ ํ๋ก์ ํธ์์๋ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐ.
์ํ ์ฑ์ ์ค์ ๋ก ํฌ๋ญํฌ ์์๋์ด ๋์ผํ ์ฅ์์์ ๋์ผํ ์คํ๋ผ์ดํธ๋ฅผ ์ด๋น ์ฌ๋ฌ ๋ฒ ๋ ๋๋งํฉ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ์ด๋์ํค๊ธฐ ์ํดํด์ผ ํ ์ผ์ ํ๋ ์ ๋น ํ ๋ฒ ์์ฑ์ ์ ๋ฐ์ดํธ. ์ด๋ฅผ ์ํด ์์ฉ ํ๋ก๊ทธ๋จ์ ํฐ์ปค์ ์ฐ๊ฒฐ. ํฐ์ปค๋ ๊ฐ ํ๋ ์๋ง๋ค ํ๋ ์ด์์ ์ฝ๋ฐฑ์ ์คํํ๋ PixiJS ๊ฐ์ฒด. // Add a variable to count up the seconds our demo has been running let elapsed = 0.0; // Tell our application's ticker to run a new callback every frame, passing // in the amount of time that has passed since the last tick app.ticker.add((delta) => { // Add the time to our total elapsed time elapsed += delta; // Update the sprite's X position based on the cosine of our elapsed time. We divide // by 50 to slow the animation down a bit... sprite.x = 100.0 + Math.cos(elapsed/50.0) * 100.0; });
๋น์ ์ดํด์ผ ํ ์ผ์ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๊ณ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ ๋ฌ ํ ๋ค์ ํด๋น ํจ์์์ ์ฅ๋ฉด์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ํ๋ ์์ด ํธ์ถ๋๋ฉฐ ํ๋ก์ ํธ์ ์ ๋๋ฉ์ด์ ์ ๊ตฌ๋ํ๋ ค๋ ๋ชจ๋ ๊ฒ์ ์ด๋, ํ์ ํ ์ ์๋ค.app.ticker.add(...)
๋ชจ๋ ๊ฒ์ ํ๋๋ก ๋ชจ์ผ๊ธฐ
<!doctype html>
<html>
<head>
<script src="https://pixijs.download/release/pixi.min.js"></script>
</head>
<body>
<script>
// Create the application helper and add its render target to the page
let app = new PIXI.Application({ width: 640, height: 360 });
document.body.appendChild(app.view);
// Create the sprite and add it to the stage
let sprite = PIXI.Sprite.from('sample.png');
app.stage.addChild(sprite);
// Add a ticker callback to move the sprite back and forth
let elapsed = 0.0;
app.ticker.add((delta) => {
elapsed += delta;
sprite.x = 100.0 + Math.cos(elapsed/50.0) * 100.0;
});
</script>
</body>
</html>
'๊ทธ๋ํฝ์ค > WebGl' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spine][pixiJs] Api ์ฌ์ดํธ (0) | 2022.05.11 |
---|---|
[2D WebGL][pixi.Js] ์ธ๋ถ์ฌํญ (0) | 2022.05.10 |
[2D WebGL][pixiJS] Getting Started! (0) | 2022.05.09 |
[3D WebGL][three.js] three.js ํ๋ก์ ํธ ์์ํด๋ณด๊ธฐ (0) | 2022.05.09 |
WebGL์ด๋, three.js๋, pixi.js๋ (0) | 2022.05.01 |