Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
最強の放置ゲームを作ってる話 ~ と、そのうちのゲーム作るためのゲームデータエディタを作ってる話 ~
Search
kthatoto
February 25, 2021
Programming
74
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
最強の放置ゲームを作ってる話 ~ と、そのうちのゲーム作るためのゲームデータエディタを作ってる話 ~
kthatoto
February 25, 2021
More Decks by kthatoto
See All by kthatoto
複数ブラウザウィンドウを 単一平面とみなしてボールの 衝突判定をする
kthatoto
0
210
CSSだけでCookie Clickerを作る
kthatoto
0
1.1k
いろいろな駆動開発の話 / various-driven-development
kthatoto
0
99
ぼくのかんがえたさいきょうの放置ゲームを作ってる話 / saikyou-houti-game
kthatoto
1
490
ぼくのかんがえたさいきょうのぶろぐしすてむ
kthatoto
0
750
Other Decks in Programming
See All in Programming
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
440
ALB ログから Trace を気合で繋げる技術
fohte
2
230
MySQLとPostgreSQLって何が違うの?
akagami
0
140
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
540
Hono + Inertia + React で LP を構築した話
oukayuka
2
160
My Marp Sample
sinoue0108
0
120
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.7k
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
510
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
210
源内ハンズオン概要編
hideg
0
210
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.7k
We Have a Design System, Now What?
morganepeng
55
8.3k
Crafting Experiences
bethany
1
260
Faster Mobile Websites
deanohume
310
32k
The Spectacular Lies of Maps
axbom
PRO
1
940
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
550
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Odyssey Design
rkendrick25
PRO
2
780
YesSQL, Process and Tooling at Scale
rocio
174
15k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
WCS-LA-2024
lcolladotor
0
810
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Transcript
࠷ڧͷ์ஔήʔϜΛ࡞ͬͯΔ ~ ͱɺͦͷ͏ͪͷήʔϜ࡞ΔͨΊͷήʔϜσʔλΤσΟλΛ࡞ͬͯΔ ~ by @kthatoto at ΞϧϛLTձ#4 on 2021/02/25()
21:00~
ࣗݾհ • ϋϯυϧωʔϜɿͱ (kthatoto) • Ruby/Rails, JavaScript/TypeScript, Nuxt/Vue, Go •
Twitterɿhttps://twitter.com/kthatoto • GitHubɿhttps://github.com/kthatoto
࠷ڧͷ์ஔήʔϜ ~ಈػ~ • 100%ࣗΈͷ์ஔήʔϜ͕͍ͨ͠ • ࣗͰ࡞Δ͔͠ͳ͍ • Ұൠతͳ์ஔήʔϜ์ஔใुྔ͕1࣍తɺ ͍͍ͤͥ2࣍త •
͡Ό͋Ծʹ3࣍తҎ্ͷใु͕Β͑ͨͱͯ͠ɺࣗͰ ୡͨ͠ײ͕͋·Γͳ͍
ԣಓ - ์ஔήʔϜͷ์ஔใु 1࣍త 1࣌ؒ͋ͨΓ10Goldੜ͞ΕΔήʔϜΛ24࣌ؒ์ஔ = 240Gold 10 × 24
2࣍త 1࣌ؒ͋ͨΓ(10 + x)Goldੜɺxͷॳظ0 xͷ1࣌ؒ͋ͨΓ+1͞ΕΔήʔϜΛ24࣌ؒ์ஔ = 516Gold 10 × 24 + 24 × (24 − 1) 2 ɾɾɾ ɾɾɾ
ԣಓ - ์ஔήʔϜͷ์ஔใु 3࣍త 1࣌ؒ͋ͨΓ(10 + x)Goldੜɺxͷॳظ0 xͷ1࣌ؒ͋ͨΓ+y͞ΕΔɺyͷॳظ0 yͷ1࣌ؒ͋ͨΓ+1͞ΕΔήʔϜΛ24࣌ؒ์ஔ =
2540Gold 10 × 24 + 24 × (242 − 1) 6 ɾɾɾ ͷʹΑͬͯୡײͷͳ͍ ΠϯϑϨͷΑ͏ʹײͯ͡͠·͏
ଟ࣍ݩతͳΠϯϑϨΛࣗͷ ૢ࡞ʹΑͬͯ֫ಘ͢Ε ୡײ͕ຯΘ͑Δ ์ஔ͍ͨ͠ʂ VS ࠷ڧͷ์ஔήʔϜ ~ಈػ~
์ஔ͞Ε͍ͯΔ࣌ͷήʔϜͷৼΔ͍Λ ࣗͰϓϩάϥϜͰ͖ΔΑ͏ʹ͢Ε ͍͍Μ͡ΌͶʁ🤔
ଟ࣍ݩతͳΠϯϑϨΛࣗͷ ૢ࡞ʹΑͬͯ֫ಘ͢Ε ୡײ͕ຯΘ͑Δ ์ஔ͍ͨ͠ʂ 🤝 ࠷ڧͷ์ஔήʔϜ ~ಈػ~ ϓϩάϥϜΛॻ͍ͯ ์ஔ࣌ͷৼΔ͍ΛࣗͰ ܾఆ͢Δ
ॻ͍ͨϓϩάϥϜΛΒͤͯ ์ஔ͢Δ
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ $ game keyup $ game keyleft $ game
keydown $ game keyright $ game action $ game cancel γΣϧͱͯ͠ΞΫηεͰ͖ΔΑ͏ʹ͢Ε ΄ͱΜͲͷϓϩάϥϜݴޠ͔ΒΞΫηεՄೳ
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ ήʔϜαʔόʔ ήʔϜ σʔλ αʔόʔ ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε Websocket
Connection $ game keyup $ game action $ game keydown ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε $ game keyleft $ game keyleft $ game action RPC RPC
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ ήʔϜαʔόʔ ήʔϜ σʔλ αʔόʔ ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε Websocket
Connection $ game keyup $ game action $ game keydown RPC ϒϥβ ෳͷΩϟϥΫλʔΛಉ࣌ʹ ૢ࡞͢Δ͜ͱͰ͖Δ
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ ήʔϜαʔόʔ ήʔϜ σʔλ αʔόʔ ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε Websocket
Connection $ game keyup $ game action $ game keydown RPC ϒϥβ ήʔϜαʔόʔ ήʔϜͷ৺ଁɻΫϥΠΞϯτͱͷଓཧɺ ήʔϜϩδοΫॲཧɺΫϥΠΞϯτ͔Βͷཁ ٻʹର͢Δσʔλฦ٫ͳͲΛߦ͏ɻ IUUQTHJUIVCDPNLUIBUPUPUFSNXPSMETFSWFS
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ ήʔϜαʔόʔ ήʔϜ σʔλ αʔόʔ ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε Websocket
Connection $ game keyup $ game action $ game keydown RPC ϒϥβ $-*ΫϥΠΞϯτ ϫʔΧʔϓϩηεΛىಈͯ͠ίωΫγϣϯΛ ுΓɺͦΕΛ௨ͯ͠શͯͷૢ࡞Λ࣮ߦ͢Δ͜ ͱ͕Ͱ͖ΔɻϓϩάϥϜΛॻ͍ͯࣗಈԽ͢Δ ͱ͖͜ΕΛ͏ɻ IUUQTHJUIVCDPNLUIBUPUPUFSNXPSME
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ ήʔϜαʔόʔ ήʔϜ σʔλ αʔόʔ ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε Websocket
Connection $ game keyup $ game action $ game keydown RPC ϒϥβ ϒϥβΫϥΠΞϯτ ී௨ʹήʔϜΛϓϨΠ͢Δ͜ͱ͕Ͱ͖Δɻ ະணख
࠷ڧͷ์ஔήʔϜ ~֓ཁ~ ήʔϜαʔόʔ ήʔϜ σʔλ αʔόʔ ϓϨΠϠʔͷPC ϫʔΧʔ ϓϩηε Websocket
Connection $ game keyup $ game action $ game keydown RPC ϒϥβ ήʔϜσʔλΤσΟλʔ Ϛελʔσʔλͷ࡞ɺཧΛߦ͏ɻ 31(πΫʔϧΈ͍ͨͳͷɻࠓͷओɻ IUUQTHJUIVCDPNLUIBUPUPUXHBNFFEJUPS
ήʔϜσʔλΤσΟλʔʹ͍͍ͭͯͨ͜͠ͱ • ϑΝΠϧγεςϜΛNuxtͷΈͰૢ࡞͢Δ • Canvas Infinite Scroll ͷΈ • ΦʔϓϯϫʔϧυͷϚοϓσʔλϑΝΠϧͷׂΛಠࣗ
࣮ͯ͠Έͨ (Coming Soon)
ϑΝΠϧγεςϜΛNuxtͷΈͰૢ࡞͢Δ • ϚοϓσʔλϑΝΠϧΛϑϩϯτΤϯυͷΈͰ ฤू͍ͨ͠ • ϚοϓσʔλϑΝΠϧ͚ͩͰɺΦʔϓϯϫʔϧυʹ ͍͔ͨ͠ΒෳϑΝΠϧʹׂ͢Δ͜ͱʹͳΔ • ϚοϓλΠϧͷը૾σʔλͳͲѻ͍͍ͨ ϑΝΠϧΛҰׅಡΈࠐΈ͢Δඞཁ͕͋Δ
nodeͷ Λ͍͍ͨ fs ͰϑΝΠϧॲཧAPIαʔόʔผͰ࡞ΔͷΊΜͲ͍...
Nuxt ͷ Server Middleware ͬͯΈΔ🤔
Nuxt Server Middleware ͱ • NuxtʹAPIαʔόʔతͳ͜ͱ୲ΘͤΔ • on node Ͱॻ͚Δ
fs ͕͑Δʂʂʂʂʂʂʂ fs.mkdir // create directory fs.rmdir // remove directory fs.readdir // list files fs.writeFile // write file fs.readFile // read file fs.unlink // delete file fs.rename // move file/directory
ϑΝΠϧγεςϜΛNuxtͷΈͰૢ࡞͢Δ Nuxt Server Frontend GET /images fs.readdir fs.readFile for {
} Response List Images
const container = document. getElementById('container') container.addEventListener('scroll', () => { const
x = container.value.scrollLeft - 25 const y = container.value.scrollTop - 25 const canvas = getElementById('canvas') canvas.style.transform = `translate(${x}px, ${y}px)` }) Canvas (Infinite) Scroll ͷΈ <div id="container"> <div class="large-box"> <canvas id="canvas"/> </div> </div> #container { width: 300px; height: 300px; overflow: scroll; } .large-box { width: 5000px; height: 5000px; } canvas { width: 350px; height: 350px; }
Canvas (Infinite) Scroll ͷΈ σϞ on Keynote <div id="container"> <div
class="large-box"> <canvas id="canvas"/> </div> </div> https://konvajs.org/docs/sandbox/Canvas_Scrolling.html
• ࣮εΫϩʔϧҐஔ࠲ඪͱ ԾεΫϩʔϧҐஔ࠲ඪΛ͓࣋ͬͯ͘ • εΫϩʔϧʹΑΔ࣮εΫϩʔϧҐஔ࠲ඪͷࠩΛ ԾεΫϩʔϧҐஔ࠲ඪʹͯΔ • ࣮εΫϩʔϧҐஔ࠲ඪ͕ͬ͜ʹ͖ͨΒɺ ࣮εΫϩʔϧҐஔ࠲ඪΛਅΜதʹͯ͠ ԾεΫϩʔϧҐஔ࠲ඪมԽͤ͞ͳ͍
• ඳըΛԾεΫϩʔϧҐஔ࠲ඪΛͱʹߦ͑ ແݶεΫϩʔϧͷ Canvas Infinite Scroll ͷΈ