NukeKang / Pixellent

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logo

Pixellent

๐ŸŽจ Make Pixel Art Easy

๐Ÿ’๐Ÿปโ€โ™‚๏ธ Introduction

Pixellent๋Š” ํ”ฝ์…€ ์•„ํŠธ๋ฅผ ์‰ฝ๊ฒŒ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์›น์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž…๋‹ˆ๋‹ค.
์ž์‹ ์ด ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ png ํŒŒ์ผ๋กœ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ, ์ €์žฅ๊ณผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ–‡ Link

Deploy

Portfolio

โš™๏ธ Tech Stack

FrontEnd

Test

Deploy

๐Ÿ— Installation

npm install
npm start

๐Ÿ“† Schedule

  • 2022๋…„ 6์›” 27์ผ - 2022๋…„ 7์›” 2์ผ: ์•„์ด๋””์–ด ์„ ์ • ๋ฐ ๊ธฐ์ˆ  ๊ฒ€์ฆ, ๊ณ„ํš (์นธ๋ฐ˜, ๋ชฉ์—… ์ž‘์„ฑ)
  • 2022๋…„ 7์›” 3์ผ - 2022๋…„ 7์›” 15์ผ: ๊ฐœ๋ฐœ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • 2022๋…„ 7์›” 16์ผ - 2022๋…„ 7์›” 22์ผ: Stand Up ๋ฐœํ‘œ ์ค€๋น„ ๋ฐ ๋ฆฌํŒฉํ† ๋ง

๐Ÿ•น Features

๊ธฐ๋Šฅ ์˜ˆ์‹œ ์„ค๋ช…
Landing Page     START ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด editor ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
Tools - Brush : ์ƒ‰์„ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Drag ๊ฐ€๋Šฅ (๋‹จ์ถ•ํ‚ค: Q)
- Eraser : ์ž‘์—…๋ฌผ ์ง€์šฐ๊ธฐ, Drag ๊ฐ€๋Šฅ (๋‹จ์ถ•ํ‚ค: W)
- Bucket : ์ฑ„์šฐ๊ธฐ ๊ธฐ๋Šฅ (๋‹จ์ถ•ํ‚ค: E)
- Eyedropper : ์ƒ‰ ์ถ”์ถœ ๊ธฐ๋Šฅ (๋‹จ์ถ•ํ‚ค: R)
- DownloadImage : png ํŒŒ์ผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- Palette : default color ์ œ๊ณต
Canvas - ์œ„์˜ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”ฝ์…€์•„ํŠธ๋ฅผ ๊ทธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- Undo๋Š” ์ด์ „์˜ ์ž‘์—…์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹จ์ถ•ํ‚ค: CTRL + Z)
Preview - ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ๊ทธ๋ฆผ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Dimension - ์บ”๋ฒ„์Šค์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Local Storage - New ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์บ”๋ฒ„์Šค๊ฐ€ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
- Save ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Local Storage์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
- Load ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Local Storage์— ์ €์žฅ๋œ ์ž‘์—…๋ฌผ๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ์ž‘์—…์„ ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ญ์ œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ Log & Challenge

๐Ÿ” ํ•˜๋‚˜๋ถ€ํ„ฐ ์—ด๊นŒ์ง€ ์Šค์Šค๋กœ

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

๐Ÿ” Bucket(์ฑ„์šฐ๊ธฐ ๊ธฐ๋Šฅ)

  • ๊ธฐ์กด์—๋Š” Pixel Component๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„ Canvas๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์ด ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ Component์˜€๊ธฐ ๋•Œ๋ฌธ์— Cell๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ƒ‰์„ ์ž…ํžˆ๋Š” ๊ฒƒ์—๋„ ์–ด๋ ค์›€์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    ์šฐ์„ , 1์ฐจ์› ๋ฐฐ์—ด๋กœ ์ด๋ฃจ์–ด์ง„ Canvas์—์„œ๋Š” ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰์„ ํ†ตํ•ด, ์ž์‹ ๊ณผ ๋‹ค๋ฅธ ์ƒ‰์ด ์น ํ•ด์ ธ ์žˆ๋Š” Cell๋“ค์„ ํŒ๋‹จํ•˜๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ์„ค๊ณ„๋ฅผ ๊ฐˆ์•„์—Ž์„ ํ•„์š”๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์œ ํ‹ธ ํ•จ์ˆ˜ ๋กœ์ง ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด Canvas ์ œ์ž‘ ๋ฐ Grid -> Row -> Cell๋กœ Component ์„ธ๋ถ„ํ™”๋ฅผ ์‹œ์ผœ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ” ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ(ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

  • Pixel Canvas ์ƒ์„ฑ ํ•จ์ˆ˜, Local Storage, Color Palette ์ƒ์„ฑ ํ•จ์ˆ˜, Bucket(์ฑ„์šฐ๊ธฐ) ํ•จ์ˆ˜ ๋“ฑ ์—ฌ๋Ÿฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋“ค์„ ๋‚˜๋ˆ ์ฃผ๊ณ  ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ•จ์ˆ˜๋ฅผ ์งœ๋ฉฐ, ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์—ญ์‹œ๋‚˜ ์‰ฝ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜๋Š” ์—†์—ˆ์ง€๋งŒ, Side effect๋„ ๋‚ฎ์ถฐ์ฃผ๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ํ™•์‹คํžˆ ์ปดํฌ๋„ŒํŠธ ์•ˆ์˜ ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ๊น”๋”ํ•ด์ง€๋Š” ๊ฒƒ์„ ์ฒด๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿคต๐Ÿปโ€โ™‚๏ธ Retrospect

๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ์˜ค๋Š” ๊ธธ์ด ์ˆœํƒ„์น˜ ๋งŒ์€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋งค ์ˆœ๊ฐ„ ํฌ๊ธฐ๋ฅผ ์ƒ๊ฐํ–ˆ๋˜ ์ ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์—ฌ๊ธฐ๊นŒ์ง€ ์–ด๋–ป๊ฒŒ๋“  ๋Œ๊ณ  ์˜จ ์ œ ์ž์‹ ์ด ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๊ธฐํŠน (?) ํ•ฉ๋‹ˆ๋‹ค.

ํŒ€ํ”Œ๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ์ € ํ˜ผ์ž ํŒ๋‹จํ•˜๊ณ  ์‹œ๋„ํ•ด ๋ณด์•„์•ผ ํ•˜๋Š” ์ ์ด ๋ฌด์ฒ™์ด๋‚˜ ๋‘๋ ต๊ณ , ๋ง์„ค์—ฌ์กŒ์Šต๋‹ˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค ์ฐธ๊ณ ํ•  ๊ฒƒ๋“ค๋„ ๊ฐˆ์ˆ˜๋ก ์ค„์–ด๋“ค๊ณ , ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๋ผ๋Š” ์˜๋ฌธ์  ์†์—์„œ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ ํ•˜๋ฉด ๋˜๋Š” ๊ตฌ๋‚˜ ๋ผ๋Š” ์ž์‹ ๊ฐ๋„ ๋ถ™๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋น„๋ก ์•„์‰ฌ์šด ์ ๋„ ๋งŽ๊ณ , ๋ฐ˜์„ฑํ•  ์ ๋„ ๋งŽ์€ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ถ€ํŠธ์บ ํ”„ 1์ฃผ์ฐจ ์‹œ์ ˆ์˜ ์ €๋ฅผ ๋Œ์ด์ผœ ์ƒ๊ฐํ•ด ๋ณด๋ฉด ๋ฏธ์•ฝํ•˜์ง€๋งŒ, ์„ฑ์žฅํ–ˆ๋‹ค๊ณ  ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ์•„์ง ๋งค์šฐ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ์ง€๋ง‰์ด ์•„๋‹ˆ๊ณ  ๋‹ค์Œ์— ๋งŒ๋“ค ์„œ๋น„์Šค๋Š” ์ด๋ฒˆ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‹ค๋“ฌ์–ด์ง„ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ํ•˜๋ฉด ํ• ์ˆ˜๋ก ๊ธฐ๋ณธ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋Š๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€๋ฆฌ ๋Œ์•„๊ฐ€๋Š” ๊ธธ์ด๋ผ๋„, ์ฒœ์ฒœํžˆ ๋ฐŸ์•„๊ฐ€๋ฉฐ ๊ฐœ๋ฐœ์„ ํ•ด๋‚˜๊ฐ€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

About


Languages

Language:JavaScript 97.8%Language:HTML 1.2%Language:CSS 0.9%