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
73
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
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
490
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
210
Performance Engineering for Everyone
elenatanasoiu
0
260
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
0
400
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.9k
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1k
Contextとはなにか
chiroruxx
1
390
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
170
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
210
Featured
See All Featured
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
170
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Accessibility Awareness
sabderemane
1
150
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
The Curse of the Amulet
leimatthew05
2
13k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Tell your own story through comics
letsgokoyo
1
990
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Designing for humans not robots
tammielis
254
26k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
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 ͷΈ