Pixi.js: ๋ฐ๋ชจ์ฒ˜๋Ÿผ ๋ฐ˜์‘ ํ˜• ํ™”๋ฉด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

์— ๋งŒ๋“  2020๋…„ 03์›” 12์ผ  ยท  24์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pixijs/pixi.js

์ฐธ์กฐ : https://pixijs.io/examples/#/demos -basic / container.js

๋‚˜๋Š” ์˜์–ด๋ฅผ ์ž˜ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.
์ตœ๊ทผ์— ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. PixiJS์˜ ํŠน์ • div ์•„๋ž˜์— ๋ฐ˜์‘ ํ˜• ์บ”๋ฒ„์Šค๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ PixiJS ๋ฐ๋ชจ ํŽ˜์ด์ง€์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

PixiJS ๋ฐ๋ชจ ํŽ˜์ด์ง€์—์„œ ํ™”๋ฉด์—๋Š” ๊ณ ์ • ๋œ ์ตœ๋Œ€ ํฌ๊ธฐ์™€ ์ตœ์†Œ ํฌ๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ฐฝ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๋ฉด ํ† ๋ผ ๊ตฌ์„ฑ ์š”์†Œ๋„ ๋™์ผํ•œ ๋น„์œจ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ฐ๋ชจ ์ฝ”๋“œ๋ฅผ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค” Question

๋ชจ๋“  24 ๋Œ“๊ธ€

์ด ๋ฐ๋ชจ ํŽ˜์ด์ง€์˜ ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ๋Š” ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
image
https://github.com/pixijs/examples

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค,
์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

img

๋ฐ๋ชจ ์ฝ”๋“œ ์ž์ฒด๋Š” ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PixiJS ๋ฐ๋ชจ ์ฝ”๋“œ๊ฐ€ ๋ฐฐํฌ ๋œ ํŽ˜์ด์ง€์—์„œ ์ฐฝ์„ ํ™•๋Œ€ํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•˜๋ฉด ๋‚ด๋ถ€ ํ† ๋ผ์˜ ์ด๋ฏธ์ง€๋„ ๋™์ผํ•œ ๋น„์œจ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.
https://pixijs.io/examples/#/demos -basic / container.js

์ด๊ฒƒ์€ ๋ฐ๋ชจ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋‹ฌ์„ฑ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ†ต๊ณผํ•˜๊ธฐ ํž˜๋“ค์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ CSS ํŠธ๋ฆญ, ๋‹น์‹ ์˜ ํ™•์ธ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€, ๋‹น์‹ ์€ ๋˜ํ•œ ํฌ๊ธฐ ์กฐ์ • ์ด๋ฒคํŠธ์— CSS์™€ ๋งž์ถค ํ™”๋ฉด์„ ํ•ดํ‚น JS์™€ ์ˆ˜์‹ ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ.
๋น„์œจ์ด์žˆ๋Š” ํ™”๋ฉด์— ์ž๋™ ํฌ๊ธฐ ์กฐ์ •์— ๋Œ€ํ•œ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
https://www.pixiplayground.com/#/edit/1vNMaYhaqi1 -JnwJ_0Y_m
๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?

๊ทธ๊ฒŒ ๋‹ค์•ผ.

์ด์ „์— KonvaJS ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
Stage ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒ๋Œ€์ ์œผ๋กœ ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

PixiJS๋กœ CANVAS ์ž์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ „๊ณต ์•„๋‹Œ๊ฐ€?
์ผ๋ถ€ ์ด๋ฏธ์ง€๋Š” CSS๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ฉฐ ๋„์›€์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
https://medium.com/@michelfariarj/scale -a-pixi-js-game-to-fit-the-screen-1a32f8730e9c

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์— ๋งค์šฐ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์ฐพ์€ ์ƒ˜ํ”Œ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ PixiJS์˜ ์บ”๋ฒ„์Šค๋Š” ์ „์ฒด ํ™”๋ฉด ํฌ๊ธฐ์— ๊ฑธ์ณ ํผ์ง‘๋‹ˆ๋‹ค.

div ์•ˆ์— PixiJS ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‚ด๋ถ€ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ์ฒ˜์Œ์— ์ผ ๋“ฏ์ด ํ™”๋ฉด์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ์บ”๋ฒ„์Šค๋ฅผ ํŽผ์น˜๋Š” ๋Œ€์‹  PixiJS ๋ฐ๋ชจ ํŽ˜์ด์ง€์™€ ๊ฐ™์€ ๋‹จ์ผ div ์•ˆ์— ์†Œ๊ฐœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
https://pixijs.io/examples/#/demos -basic / container.js

๋ณด์‹œ๋‹ค์‹œํ”ผ ์ „์ฒด ํ™”๋ฉด์ด ์•„๋‹Œ ํ™”๋ฉด์˜ ์ผ๋ถ€ div์—์„œ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์บ”๋ฒ„์Šค์˜ ์ตœ์†Œ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด์žˆ์–ด ๋งค์šฐ ๋ฉ‹์ง„ ํ™”๋ฉด์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์ง€ ๋งŒ webMaster ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋‹น์‹ ์—๊ฒŒ ๋Œ€๋‹ตํ•˜๊ธฐ์—๋Š” FrontEnd๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ €๋„ ์˜์–ด๊ฐ€ ๋‹ค์†Œ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
์•ˆํƒ€๊น๊ฒŒ๋„ ์ตœ์„ ์„ ๋‹คํ–ˆ๊ณ  ์–ธ์–ด ์žฅ๋ฒฝ์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฐ๋ชจ ์†Œ์Šค ํŽ˜์ด์ง€์—์„œ Iframe์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„ํ•  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CSS ๊ทœ์น™์œผ๋กœ DIV๋ฅผ ๋งŒ๋“ค๊ณ  ID๊ฐ€์žˆ๋Š” Iframe์„ ๋‚ด๋ถ€์— ๋„ฃ๊ณ  ์ƒˆ ์บ”๋ฒ„์Šค ID๋ฅผ pixi ์•ฑ์— ์ „๋‹ฌํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
image

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์ „์ฒด ํ™”๋ฉด์— PixiJS ์บ”๋ฒ„์Šค๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด HTML์—๋Š” ํ•˜๋‚˜์˜ div๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. PixiJS ์บ”๋ฒ„์Šค๋ฅผ ๋„ฃ์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ฐฝ์ด ์ „์ฒด ํ™”๋ฉด์œผ๋กœ ์—ด๋ฆด ๋•Œ div๊ฐ€ 300 * 300์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ฐฝ์ด ์ž‘์•„์ง€๋ฉด 1 : 1 ๋น„์œจ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๋ฐ๋ชจ๋Š” iframe์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
๋Œ€์‹  ์ผ๋ฐ˜ html div์—์„œ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ๋ชจ์ฒ˜๋Ÿผ ์ „์ฒด ํ™”๋ฉด์ด ์•„๋‹ˆ๋ผ ํ™”๋ฉด์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋ ‰์Šค๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

https://github.com/ivanpopelyshev/pixi-starfighter
https://github.com/ivanpopelyshev/pixi-starfighter/blob/master/css/index.css

์บ”๋ฒ„์Šค ํฌ๊ธฐ๋Š” ํ•ญ์ƒ ๋™์ผํ•˜๋ฉฐ CSS๋ฅผ ํ†ตํ•ด ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”ฝ์…€ ๋Œ€ ํ”ฝ์…€ ๋น„์œจ์˜ ์บ”๋ฒ„์Šค๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ-css, pixi ๋ณ€ํ™˜, pixi ์บ”๋ฒ„์Šค ํฌ๊ธฐ ์กฐ์ • ๋ฐฉ๋ฒ•, ์บ”๋ฒ„์Šค ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ๋•Œ pixi๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—… ๋“ฑ ๋ชจ๋“  ๊ฒƒ์„ ๋ฐฐ์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค.

PixiJS๋Š” PixiJS ์ž์ฒด๊ฐ€ ์•„๋‹Œ CSS๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๊นŒ?

KonvaJS๋Š” Stage๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ํ•œ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

PixiJS๋Š” PixiJS ์ž์ฒด๊ฐ€ ์•„๋‹Œ CSS๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๊นŒ?

์Šคํ…Œ์ด์ง€ ๋ณ€ํ™˜ ์Šค์ผ€์ผ, ์บ”๋ฒ„์Šค ํฌ๊ธฐ ์กฐ์ •, CSS ๋„ˆ๋น„ / ๋†’์ด ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ ํ”Œ๋ ‰์Šค ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์•ฑ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์‹ญ์‹œ์˜ค.

KonvaJS๋Š” Stage๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

PixiJS๋Š” ๋ฌผ๊ฑด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ Œ๋”๋ง์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฌ๊ธฐ ์กฐ์ •์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ํ”Œ๋ ‰์Šค ์˜ˆ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค! ๋” ์›ํ•˜์„ธ์š”? ๋‹น์‹ ์€ ๋ฐฐ์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‚˜์ค‘์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ˆ˜์ค€์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ณ€ํ˜•์— ๋Œ€ํ•œ ์ง€์‹์ด ์—†์œผ๋ฉด ์š”์†Œ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์ ์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์•„๋ฌด๋„ ํฌ๊ธฐ ์กฐ์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋ฌผ์—ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ๋Œ€๋‹ตํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‹จ์ผ ๊ธฐ์‚ฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค!

https://www.html5gamedevs.com/forum/15-pixijs/ ์—์„œ ํฌ๊ธฐ ์กฐ์ •์— ๋Œ€ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์œ„ํ‚ค์— ๋„ฃ๊ฒ ์Šต๋‹ˆ๋‹ค : https://github.com/pixijs/pixi.js/wiki/v5-Migration-Guide

๊ฐ€๋Šฅํ•œ ํ•œ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Konva ํฌ๊ธฐ ์กฐ์ • ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ PixiJS์— ํฌํŒ…ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

https://jsfiddle.net/Lhankor_Mhy/pvwr8b2g/3/

์ด๋ ‡๊ฒŒ ํ™•๋Œ€ / ์ถ•์†Œํ•˜๊ณ  ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์Šคํ…Œ์ด์ง€๋ฅผ ์ด๋™ํ•  ์ˆ˜์žˆ๋Š” KonvaJS ํ™”๋ฉด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ PixiJS๋กœ ์˜ฎ๊ธฐ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ PixiJS๋Š” ๊ฐ์ฒด๊ฐ€ ๋ณต์žกํ•˜๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฌ๋“ ์ง€ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ˆœ์ˆ˜ํ•œ PixiJS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋˜ํ•œ PixiJS V5์— ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์—ˆ๊ณ  KonvaJS์—์„œ ์˜ฎ๊ธฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋‹ฌ์„ฑํ•˜๋ ค๋Š” ํ™•๋Œ€ / ์ถ•์†Œ ๋ฐ ๋“œ๋ž˜๊ทธ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

KonvaJS
https://jsfiddle.net/takeshi1234/a0uqk23e/1/

PixiJS
https://jsfiddle.net/takeshi1234/hk0wbj3m/4/

์ €๋Š” PixiJS์—์„œ ์—ด์‹ฌํžˆ ์ผํ•˜๊ณ  ์žˆ์œผ๋ฉฐ KonvaJS๋กœ ๋งŒ๋“  ํŽ˜์ด์ง€์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PixiJS๊ฐ€ ๋ฌด๋Œ€๋ฅผ ํ™•์žฅํ•˜๋ฉด ์•ˆ๋˜๋‚˜์š”?

๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ.
ใƒป ์บ”๋ฒ„์Šค์˜ ํฌ๊ธฐ๋Š” ์•ฝ 800 * 800์ž…๋‹ˆ๋‹ค.
ใƒป ๋จผ์ € ์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ณ  ์บ”๋ฒ„์Šค์— ์˜ฌ๋ ค ๋†“์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋Š” 8000 * 8000์—์„œ 6000 * 6000๊นŒ์ง€ ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. (์ •์‚ฌ๊ฐํ˜•์€ ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.)
ใƒป ํ™”์ƒ์„ ์บ”๋ฒ„์Šค์˜ ํฌ๊ธฐ๋กœ ์ •ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œ ํ•œ ํ›„ ์Šคํ…Œ์ด์ง€์— ๋™๊ทธ๋ผ๋ฏธ, ์บ๋ฆญํ„ฐ ๋“ฑ ํ”ฝ์‹œ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŽ์ด ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.
ใƒป ๋งˆ์šฐ์Šค ํœ ๋กœ ํ™•๋Œ€ / ์ถ•์†Œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
ใƒป ํ™•๋Œ€ ํ›„ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ์Šคํ…Œ์ด์ง€ ์œ„์น˜๋ฅผ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค. (๋‹จ, ๋ฌด๋Œ€ ๋์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์‹ค์ œ๋กœ ๋งŒ๋“ค์–ด์ง„ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ๋ณด๊ณ  ์กฐ์–ธ์„ ํ•ด์ฃผ์…จ ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„์š”, ๋‹น์‹ ์€ ๋‚˜์—๊ฒŒ ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ฃผ ์…จ์œผ๋‹ˆ, ์ œ๊ฐ€ ๋ณผ๊ฒŒ์š” :)

window.addEventListener ( 'resize', resize);

resize ();
var w, h;
function resize () {

var canvasRatio = 800 / 1440; ////canvas widthve canvas height
var windowRatio = window.innerHeight / window.innerWidth;



if (windowRatio < canvasRatio) {
    h = window.innerHeight;  
    w = h / canvasRatio;

} else {
    w = window.innerWidth;
    h = w * canvasRatio;

}
app.view.style.width = w + 'px';
app.view.style.height = h + 'px';
// resizeHtmlElement ();
}

const ์บ”๋ฒ„์Šค = document.getElementById ( "canvas")

const app = new PIXI.CanvasRenderer ({

view:canvas,
width:1440,
height:800,
backgroundColor: 0xFFFFFF,
antialias: true

})

//document.body.appendChild(app.view);

var stage = new PIXI.Container ();

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์—†์–ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š”.
ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ™•๋Œ€ / ์ถ•์†Œ ๋ฐ ๋“œ๋ž˜๊ทธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‚ด ๋„์›€์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ท€ํ•˜์˜ ์˜ˆ๊ฐ€ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„์˜ ๋ถˆ์•ˆ๊ฐ์„ ์•ˆ๊ฒจ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ 1 ๋ถ„๋งŒ ์‚ดํŽด ๋ณด์•˜์ง€๋งŒ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ๊ฑฐ์˜ ์ค€๋น„๋˜์–ด ์žˆ์Œ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์ˆ˜ํ•™ ๋ฐ ๊ฒฝํ—˜ ์–‘์‹์„ pixi ์˜ˆ์ œ์— ์ถ”๊ฐ€ํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์‚ฌ๊ฐํ˜•์„ ์ด๋™ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค : https://pixijs.io/examples/#/plugin -projection / basic.js, ํ™”๋ฉด์—์„œ๋„ ๋˜‘๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ ๋ฌธ์ œ๋Š” toLocal / toGlobal ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ์ด ์ž‘์—…์„ ํ•ด๊ฒฐํ•˜๋ฉด ๋ฏธ๋ž˜์— ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. pixi ๋ณ€ํ™˜ ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋™์ผํ•œ ๋‚ด์šฉ์ด ๊ณ„์†ํ•ด์„œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋„์™€ ์ค„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹  : ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž์œ ๋กœ์šธ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์—ฌ์œ ๋กญ๊ฒŒ ์šฐ๋ฆฌ ์ง์›๋“ค์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” pixi-viewport๊ฐ€ ๋งค์šฐ ๋งค๋ ฅ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž„์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ์—๋Š” v4 ์šฉ์ด๋ผ๊ณ  ๋‚˜์™€ ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•˜๋ฉด v5์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด์ƒ์„ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด pixi-viewport๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋“  v5์™€ pixi-viewport๊ฐ€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋“ ๊ฐ„์— ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ์—ฌ๊ธฐ์—์„œ ๋ฐœํ‘œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ž˜์—๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ณค๊ฒฝ์— ์ฒ˜ํ•  ๋•Œ.

https://github.com/davidfig/pixi-viewport/issues/212

pixi-viewport๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

PixiJS๋Š” ์ž˜ ๋ฐœ๋‹ฌ ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋งค์šฐ ์ˆ˜์šฉ ์ ์ž…๋‹ˆ๋‹ค.

์ด ๋„์„œ๊ด€์€ ์ •๋ง ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰