Javascript/pixi.js

[Pixi.js] ํ™˜๊ฒฝ์„ค์ •๊ณผ PIXI ๊ฐ์ฒด ์‚ดํŽด๋ณด๊ธฐ

Rainbow๐ŸŒˆCoder 2022. 12. 21. 16:08
728x90

git init

 

npm install pixi.js

 

index.html์—์„œ ์•„๋ž˜ ์ถ”๊ฐ€

<script src="./node_modules/pixi.js/dist/pixi.min.js"></script>

ํ•ด์ฃผ๊ฑฐ๋‚˜ npm์œผ๋กœ ๋‹ค์šด๋ฐ›์ง€ ์•Š๋”๋ผ๋„ ์•„๋ž˜ ๋ผ์ธ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

<script src="https://pixijs.download/release/pixi.js"></script>

 

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>PIXI TUTORIAL</title>
</head>
<body>
	<script src="./node_modules/pixi.js/dist/pixi.min.js"></script>
	<!--npm install pixi.js ๋Œ€์ฒด์šฉ <script src="https://pixijs.download/release/pixi.js"></script>-->
	<script src="./app.js" defer></script>
	<header>
	<img src="https://pixijs.download/pixijs-banner-no-version.png"/>
	<h1>PIXI STUDY</h1>
</header>

<form>
	<select>
		<option value="PIXI1">1</option>
		<option value="PIXI2">2</option>
		<option value="PIXI3">3</option>
		<br>
	</select>
</form>
<main>
<section>
<ul>
	<li>
		<p>
			<span>
				2022๋…„ 12์›” 21์ผ
			<span>
			PIXI ํ™˜๊ฒฝ์„ค์ •๊ณผ ๊ธฐ๋ณธ ์†์„ฑ ํ•™์Šต
			<a href = "https://www.youtube.com/watch?v=ajaduDDePIY" target="_blank">(Source1)</a>
			<a href = "https://www.youtube.com/watch?v=_HjQTzpbRK4&list=PLGsA9l-S7trVmUJ7HJsNSKIj0qoAO_qO8&index=1" target="_blank">(Source2)</a>
		</p>
	</li>
</ul>
</section>
</main>
</body>
</html>

์œ„์™€ ๊ฐ™์ด ์˜ˆ์‹œ ์ฝ”๋“œ ์ž‘์„ฑ

 

app.js

const Application = PIXI.Application;
const app = new Application();

์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด์ค€ ๋’ค, 

์ฝ˜์†”์— PIXI๋ฅผ ์ž‘์„ฑํ•˜๋ฉด,

์ž˜ ๋œฌ๋‹ค.

ํŽผ์ณ๋ณด๋„๋ก ํ•œ๋‹ค.

์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ๋‚˜์˜จ๋‹ค...๐Ÿ‘

 

์ด์ œ ์‹ค๋ฌด์—์„œ ํ”ฝ์‹œ๋Š” 

export default class ๊ณ ์–‘์ดํŒ์—… extends ๊ธฐ๋ณธํŒ์—… {
	app: PIXI.Application | null;
    clickEventHandler!: (e: any) => void;
    
    constructor(parent?: any, options?: any) {
		super(parent, options);
		this.app = null;
	}

	destroy() {
		this.app!.view.parentElement!.removeEventListener("mousemove", this.clickEventHandler);
		super.destroy();
	}
}

์œ„์™€ ๊ฐ™์ด ์“ฐ์—ฌ์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

PIXI.Application์€ ํด๋ž˜์Šค์ด๋‹ค.

class {

    constructor(i){

         this.stage = new ....

    }

renderer... ๋“ฑ๋“ฑ์ด ๋‹ด๊ฒจ์ ธ ์žˆ๋Š” ๊ฒƒ์ด ๋ณด์ธ๋‹ค.

 

์ฝ˜์†”์—์„œ ์กฐ๊ธˆ ๋” ๋šœ๋“œ๋ ค๋ณธ๋‹ค.

stage, renderer, ticker

์ฆ‰ Application์€์€ PixiJS ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋„์šฐ๋ฏธ ํด๋ž˜์Šค๋กœ,

๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ , ์Šคํ…Œ์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ , ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ํ‹ฐ์ปค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

์ด tempApp.view ๋ฅผ ๋›ฐ์–ด๋ณด๋ฉด canvas ํƒœ๊ทธ๊ฐ€ ์ฐํžŒ๋‹ค.

tempApp์˜ renderer -> plugins -> interaction ๊นŒ์ง€ ํŒŒ๊ณ ๋“ค์–ด๊ฐ€๋ณด์ž

ํฌ์ธํ„ฐ๋‹ค์šด, ํฌ์ธํ„ฐ๋ฌด์Šค ๋“ฑ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ณด์ธ๋‹ค!

https://pixijs.download/dev/docs/PIXI.AnimatedSprite.html#onpointerdown
https://pixijs.download/dev/docs/PIXI.BitmapText.html#onpointermove
https://pixijs.download/dev/docs/PIXI.BitmapText.html#onpointerup

์ฝ”๋“œ ํ™œ์šฉ์˜ˆ์ œ

 

์ด pixi app์„ dom์— ์ถ”๊ฐ€ํ•ด๋ณธ๋‹ค.

 

DOM์— ๋ทฐ ์ถ”๊ฐ€

๋•Œ PIXI. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค๋Š” ๋ Œ๋”๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ Œ๋”๋งํ•  Canvas ์š”์†Œ๋ฅผ ๋นŒ๋“œ. PixiJS๋กœ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ณด๋ ค๋ฉด ์ด Canvas ์š”์†Œ๋ฅผ ์›น ํŽ˜์ด์ง€์˜ DOM์— ์ถ”๊ฐ€. ํŽ˜์ด์ง€์˜ ์Šคํฌ๋ฆฝํŠธ ๋ธ”๋ก์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€

  document.body.appendChild(app.view);

 

const Application = PIXI.Application;
const app = new Application();
document.body.appendChild(app.view);

์œ„์™€ ๊ฐ™์ด ํ•ด๋„ ๋˜๊ณ ,

์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๋„ ๋œ๋‹ค.

	let app = new PIXI.Application({width: 640, height: 360 });
	document.body.appendChild(app.view);

์‹ค๋ฌด์—์„œ๋„ ํ”ฝ์‹œ๋ฅผ ๋”ฐ๋ผ ์›ฌ๋งŒํ•ด์„œ๋Š” app์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

728x90