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
98
ぼくのかんがえたさいきょうの放置ゲームを作ってる話 / saikyou-houti-game
kthatoto
1
480
ぼくのかんがえたさいきょうのぶろぐしすてむ
kthatoto
0
740
Other Decks in Programming
See All in Programming
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
250
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
350
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
140
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
さぁV100、メモリをお食べ・・・
nilpe
0
140
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.3k
Oxcを導入して開発体験が向上した話
yug1224
4
310
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
240
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
170
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
570
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
170
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Making the Leap to Tech Lead
cromwellryan
135
9.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The browser strikes back
jonoalderson
0
1.2k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Agile that works and the tools we love
rasmusluckow
331
21k
Are puppies a ranking factor?
jonoalderson
1
3.5k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
Automating Front-end Workflow
addyosmani
1370
210k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
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 ͷΈ