Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ゼロからはじめるゲームプログラミング
Search
kaidouji85
June 16, 2018
0
1.5k
ゼロからはじめるゲームプログラミング
kaidouji85
June 16, 2018
Tweet
Share
More Decks by kaidouji85
See All by kaidouji85
AbortControllerでPromiseをキャンセルする
kaidouji85
0
13
一発芸!!なんちゃってローカライズ
kaidouji85
0
79
AWSだけでネット対戦できるブラウザゲームを作った話
kaidouji85
0
68
GitHub CopilotでJavaScript開発効率を爆上げする
kaidouji85
0
110
Serverless + Fargate構成で継続的デリバリーの速度を劇的に改善した話
kaidouji85
0
940
サーバーレスアーキテクチャこそ"ヘキサゴナルアーキテクチャ"
kaidouji85
0
110
サーバーレスでターンベース制のネット対戦ゲームを作った話
kaidouji85
0
630
CDKで構築したFargateのデプロイ時間を改善した話
kaidouji85
2
560
ブラウザゲームで視聴者参加型のゲーム配信
kaidouji85
0
360
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
54
7.9k
For a Future-Friendly Web
brad_frost
180
10k
Making Projects Easy
brettharned
120
6.5k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.6k
Thoughts on Productivity
jonyablonski
73
5k
Scaling GitHub
holman
464
140k
The Pragmatic Product Professional
lauravandoore
37
7.1k
Fireside Chat
paigeccino
41
3.7k
Balancing Empowerment & Direction
lara
5
800
Become a Pro
speakerdeck
PRO
31
5.7k
Transcript
θϩ͔Β͡ΊΔ ήʔϜϓϩάϥϛϯά ϓϩάϥϛϯάੜ์ૹษڧձୈճˏαΠϘζגࣜձ ࣾদࢁΦϑΟε։࠵ ɹ༎հ
ࣗݾհ ɹ༎հ ϓϩάϥϚʔ +4େ͖ ϓϩੜͪΌΜେ͖
Ѫඤݝͱ͍͑ ԿΛࢥ͍ු͔·͔͢ʁ
ͺͬΓϙϯδϡʔεͰ͢ΑͶʂ
Ͱɺϙϯͱ͍͑ɺ ԿΛࢥ͍ු͔·͔͢ʁ
ήʔϜͷ10/(Ͱ͢ΑͶʂ
Ѫඤ ˣ ϙϯδϡʔε ˣ 10/( ˣ ήʔϜ
ͱ͍͏༁Ͱ ήʔϜϓϩάϥϛϯά ͷΛ͠·͢
ࠓͷΰʔϧ
αϯϓϧίʔυ ࠓղઆ͢Δαϯϓϧίʔυ͜͜Ͱ͢ IUUQTHJUIVCDPNLBJEPVKJCFHJOHBNF
ΞδΣϯμ Ξχϝʔγϣϯ͢Δ ΩϟϥΫλʔΛૢ࡞͢Δ ఢͱͨΓఆΛ࡞Δ ఢΛྔ࢈͢Δ
ΞδΣϯμ Ξχϝʔγϣϯ͢Δ ΩϟϥΫλʔΛૢ࡞͢Δ ఢͱͨΓఆΛ࡞Δ ఢΛྔ࢈͢Δ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ΩϟϥΫλʔ͕ӈʹಈ͚ͩ͘ )5.-ʹը૾ɺ+4ϑΝΠϧ͕ஔ͞Ε͍ͯΔ +4Ͱը૾ΛΞχϝʔγϣϯ͍ͤͯ͞Δ
Ξχϝͷجຊ ύϥύϥອըͰ͢
ͦͷୈҰา ੩ࢭըΛඳ͘͜ͱͰ͢
ղઆ Ξχϝʔγϣϯ͞ΕΔʹɺ ੩ࢭը͕ඳ͚ͳ͍ͱʹͳΒͳ͍ ͜ͷ߹ϓϨΠϠʔΛ͖ͳҐஔʹදࣔ͢Δ ͜ͱ͕Ͱ͖ͳ͍ͱବ Ͳ͏͢Εɺ)5.-ը૾Λ͖ͳҐஔʹ දࣔͰ͖Δͷ͔
USBOTGPSNUSBOTMBUF ը૾Λ͖ͳҐஔʹදࣔͰ͖ΔελΠϧ \USBOTGPSNUSBOTMBUF Y࠲ඪ Z࠲ඪ ^ IUUQTEFWFMPQFSNP[JMMBPSHKBEPDT8FC $44USBOTGPSN
)5.-ͷ࠲ඪܥ 9 :
ήʔϜϧʔϓ ήʔϜϓϩάϥϜͰɺύϥύϥອըͷཁྖͰ ΞχϝʔγϣϯΛ࣮ݱ͍ͯ͠Δ ύϥύϥອըΛϓϩάϥϜͰ࠶ݱ͢Δͱɺ ແݶϧʔϓʹͳΔ ͜ͷΑ͏ͳϧʔϓΛɺήʔϜϧʔϓͱ͍͏ αϯϓϧͰɺҰఆִؒͰϓϨΠϠʔ9࠲ඪ ʹ ͍ͯ͠Δ
SFRVFTU"OJNBUJPO'SBNF )5.-ͰήʔϜϧʔϓΛ࣮ݱ͢ΔͨΊͷͷ Ҿʹࢦఆͨؔ͠Λɺ͍͍ײ͡ͷλΠϛϯά Ͱݺͼग़ͯ͘͠ΕΔ '14͘Β͍ʹͳΔ IUUQTEFWFMPQFSNP[JMMBPSHKBEPDT8FC "1*8JOEPXSFRVFTU"OJNBUJPO'SBNF
SFRVFTU"OJNBUJPO'SBNFྫ function gameLoop(time) { requestAnimationFrame(gameLoop); playerPos.x += 4; } requestAnimationFrame(gameLoop);
ΞδΣϯμ Ξχϝʔγϣϯ͢Δ ΩϟϥΫλʔΛૢ࡞͢Δ ఢͱͨΓఆΛ࡞Δ ఢΛྔ࢈͢Δ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ϚεΛԡ͍ͯ͠Δ͚࣌ͩɺΩϟϥ͕ӈʹਐΉ
ϚεΠϕϯτͰ ૢ࡞ঢ়ଶΛͱΖ͏
ղઆ JG ϘλϯΛԡͨ͠ Y ͱ͍ͨ͠ )5.-ʹNPVTFEPXOɺNPVTFVQͱ͍͏ Πϕϯτ͕༻ҙ͞Ε͍ͯΔ Πϕϯτى͖ͨॠؒʹ໋ྩ͕࣮ߦ͞ΕΔͷ ͳͷͰɺήʔϜϧʔϓͰ͑ͳ͍ ͔ͩΒɺมʹ݁ՌΛอ͓࣋ͯ͘͠
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ϚεΛԡ͍ͯ͠ΔؒɺϓϨΠϠʔ͕Ϛεϙ Πϯλʹ͔ͬͯҠಈ͢Δ ϓϨΠϠʔ͕Ϛεʹۙͮ͘ͱɺ Կނ͔ϒϨΔ ݁ߏͳසͰɺϓϨΠϠʔ͕બঢ়ଶʹͳΔ
ϕΫτϧԋࢉͰ ΩϟϥͷڍಈΛ࣮ݱ
ϚεΛԡͨ࣌͠ͷڍಈ Ϛεͷํʹ ϐΫηϧҠಈ
1 QY QZ ϓϨΠϠʔ࠲ඪ . UY UZ Ϛε࠲ඪ
Ҡಈྔ1.c1.cY c.1c 1. WY WZ
1 QY QZ ϓϨΠϠʔ࠲ඪ . UY UZ Ϛε࠲ඪ
1. WY WZ UYQY UZQZ c1.c 1. WY WZ
1 ϓϨΠϠʔ࠲ඪ . Ϛε࠲ඪ 1. WY WZ c1.c㲋 WY? WZ?
c1.c
1 QY QZ ϓϨΠϠʔ࠲ඪ . UY UZ Ϛε࠲ඪ
Ҡಈྔ WYc1.cY WZc1.cY c1.c 1. WY WZ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ϓϨΠϠʔ͕બঢ়ଶʹͳΔόά͕࣏͍ͬͯΔ ϓϨΠϠʔ͕Ϛεʹۙͮ͘ͱϒϨΔόά͕ ࣏͍ͬͯΔ
*.(ΛΊΑ͏
ͳͥબͰ͖Δͷ͔ ը૾λάͳͷͰɺ ϚεΫϦοΫͰબͰ͖ͯ͠·͏ ͔ͩΒɺը૾λάͰͳ͘͢ EJWλάʹͯ͠ɺഎܠը૾ͱͯ͠ ݩʑͷը૾Λઃఆ͢Δ
ڑʹԠͯ͡ ҠಈྔΛௐ͠Α͏
ղઆ ϓϨΠϠʔɺϚεͷڑ͕ҠಈྔΑΓখ͍͞ ߹ɺϓϨΠϠʔ͕ϚεΛಥ͖ൈ͚ͯ͠·͏ ۩ମྫ࣍Ͱղઆ
ϒϨΔݪҼ ϐΫηϧ ϐΫηϧ ϓϨΠϠʔ Ϛε
ϒϨΔݪҼ ϐΫηϧ ϐΫηϧ ϓϨΠϠʔ Ϛε
ϒϨΔݪҼ ϐΫηϧ ϐΫηϧ ϓϨΠϠʔ Ϛε ϐΫηϧ
ϒϨΔݪҼ ϐΫηϧ ϓϨΠϠʔ Ϛε ϐΫηϧ
ϒϨΔݪҼ ϐΫηϧ ϓϨΠϠʔ Ϛε ϐΫηϧ
ղܾࡦ Ҡಈྔڑ Ҡಈྔͷ͚ͩਐΉ Ҡಈྔڑ ڑͷ͚ͩਐΉ
ϓϨΠϠʔ Ϛε ϓϨΠϠʔ Ϛε ϐΫηϧ ϐΫηϧ ϐΫηϧ ϐΫηϧ Ҡಈྔڑ Ҡಈྔڑ
ΞδΣϯμ Ξχϝʔγϣϯ͢Δ ΩϟϥΫλʔΛૢ࡞͢Δ ఢͱͨΓఆΛ࡞Δ ఢΛྔ࢈͢Δ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ࠨʹҠಈ͢Δ͚ͩͷఢΛՃͨ͠ )5.-ϑΝΠϧʹఢը૾ΛՃ ͦΕҎ֎ɺࠓ·Ͱͬͨ͜ͱͷΈ߹Θͤ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ఢͱͷͨΓఆΛ࣮ͨ͠ ήʔϜΦʔόʔ͕ग़ଓ͚Δόά͕͋Δ
ͨΓఆ ؒͷڑΛݟΑ͏
ͨΓఆ ͨΓఆͷํ๏৭ʑ͋Δ͕ɺ ؒͷڑͰఆ͢Δํ๏ָ͕Ͱ͢ ϓϨΠϠʔɺఢͷڑ͕ҰఆҎԼͳΒ ͍ͨͬͯΔͱఆ͠·͢
1 QY QZ ϓϨΠϠʔ࠲ඪ & FY FZ ఢ࠲ඪ
ؒͷڑ 㲋 FYQY ? FZQZ ? ڑ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ήʔϜΦʔόʔ͕ճ͚ͩग़ΔΑ͏ʹͳͬͨ ήʔϜΦʔόʔͨ͠Βɺ ϓϨΠϠʔ͕ফ͑ΔΑ͏ʹͳͬͨ
ऴΘΒͳ͍(BNF0WFSͷݪҼ ήʔϜΦʔόʔఆϩδοΫ͕ɺ ϓϨΠϠʔͱఢͷ৮͚͔ͩͩΒ Ϛ˓ΦͰɺνϏʹͳͬͨ࣌ͷແఢ͕࣌ؒ ͳ͍ͱͲ͏ͳΔͰ͠ΐ͏ ˢσΧΠঢ়ଶͰɺҰॠͰࢮʹ·͢ ࠓճͦΕͱಉ͡ݪҼͰ͢
ࢮϑϥάΛ Ճ͠·͠ΐ͏
ղઆ ϓϨΠϠʔ͕ੜ͖͍ͯΔ͔ɺࢮΜͰ͍Δ͔Λ දݱ͢ΔมΛՃ͠·͠ΐ͏ ϓϨΠϠʔ͕ੜ͖͍ͯΔ߹ͷΈɺ(BNF0WFS Λදࣔ͠·͢ ˢಉ͡λΠϛϯάͰɺϓϨΠϠʔΛࢮঢ়ଶʹ ͠·͠ΐ͏
ΞδΣϯμ Ξχϝʔγϣϯ͢Δ ΩϟϥΫλʔΛૢ࡞͢Δ ఢͱͨΓఆΛ࡞Δ ఢΛྔ࢈͢Δ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ڍಈԿมΘ͍ͬͯ·ͤΜ ίʔυͷߦ͕૿͑ͨͷͰɺϑΝΠϧׂͨ͠
ΫϥεԽ͢Ε ྔ࢈Ͱ͖Δ
ͳͷͰɺطଘϑΝΠϧΛ Ϋϥεׂ͠·͠ΐ͏
Ϋϥεͱ σʔλͱͦΕʹؔ͢Δૢ࡞ΛɺҰͭͷ෦ ʹ·ͱΊΔ ˢͷ͜ͱΛΫϥεͱ͍͏ ΫϥεΛ࡞Δج४ɺ͍ํͳͲ ΦϒδΣΫτࢦΛษڧ͢Δͱ͍͍
σʔλ ૢ࡞ ࢀর ϓϩάϥϜͷجຊߏ
σʔλ ૢ࡞ ࢀর ϓϩάϥϜͷجຊߏ ϞδϡʔϧͰ·ͱΊΔ
σʔλ ૢ࡞ ࢀর ϓϩάϥϜͷجຊߏ Ϋϥε ϝϯόม ϝιου
ࠓճͷΫϥε͚ ϓϨΠϠʔ ఢ λονؔ࿈ ͨΓఆ ϕΫτϧεΧϥྔܭࢉ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ࢁͷఢ͕ग़ΔΑ͏ʹͳͬͨ ιʔεͷ)5.-ϑΝΠϧ͔ΒΩϟϥΫλʔ %*7͕ফ͑ͨ ͰΠϯεϖΫλͰݟΔͱɺ%*7ͪΌΜͱ ͋Δ
ఢ͕ྔ࢈Ͱ͖ͳ͍ʁ ΦϒδΣΫτࢦతʹɺఢΛྔ࢈͚ͨ͠Ε ͦͷ͚ͩఢΫϥεΛOFX͢Ε͍͍ ͦΕͰΖ͏ͱͨ͠Βɺఢ͕ମ͔͠ දࣔ͞Εͳ͔ͬͨ ˢఢΫϥε)5.-্ͷ%*7Λࢀর͍ͯ͠Δ ͷͰɺఢͷ͚ͩಉλά͕ඞཁʹͳΔ
ίϯετϥΫλͰ EJWΛੜ͍ͯ͠Δ
ղઆ ఢΫϥεͷίϯετϥΫλͰ%*7λάΛੜ ˢͷ%*7λάΛɺ+BWB4DSJQUͰ)5.-ʹՃ ͜ΕͰɺ%*7λά͕ಈతʹՃ͞ΕΔΈ͕ ͬͨ
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ڍಈมߋͳ͠ ݟ௨͠Λྑ͘͢ΔͨΊɺఢͷੜॲཧɺ ήʔϜϧʔϓॲཧΛ·ͱΊͨΫϥεΛՃ ·ͱΊΔ࣌ʹίπ͕͋ΔɺͦΕʜʜ
ྻʹಥͬࠐΜͰ ϧʔϓͰҰׅॲཧ͢Δ
#&'03& const enemy1 = new Enemy(); const enemy2 = new
Enemy(); const enemy3 = new Enemy(); enemy1.gameLoop(); enemy2.gameLoop(); enemy3.gameLoop();
"'5&3 this._enemyList = [ new Enemy(), new Enemy(), new Enemy()
]; this._enemyList.forEach(enemy => { enemy.gameLoop(); });
ղઆ ఢΛྔ࢈ͯ͠ɺݺͼग़͢ϝιουશͯಉ͡ ಉ͡ͷΛఢͷ͚ͩίϐϖ͢Δͷ͠ΜͲ͍ ͔ͩΒɺఢΛྻมʹηοτͯ͠ϧʔϓͰ ճͯ͠ಉ͡ॲཧΛͤ͞Δ
͓ർΕ༷Ͱͨ͠ ղઆҎ্Ͱ͢
·ͱΊ ήʔϜͷجຊύϥύϥອըͷݪཧͰ͋Δ ҠಈɺͨΓఆͷ࣮ݱํ๏ΛΔʹɺ ֶɾཧΛษڧ͠Α͏ ΫϥεԽ ྻϧʔϓͰΩϟϥΛྔ࢈͠Α͏
͝ਗ਼ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠
͓·͚5XFFO
αϯϓϧͷσϞ
αϯϓϧ֓ཁ ϓϨΠϠʔɺఢͷಈ͖Λ5XFFOʹஔ͖͑ͨ ఢͷಈ͖͕खʹͳͬͨ (BNF0WFS͕ঃʑʹු͖ग़ΔΑ͏ʹͳͬͨ
5XFFOΛ͍·͠ΐ͏
5XFFOͱ 5XFFOͱಈ͖Λొͯ͠ɺܦա࣌ؒʹԠͨ͡ ʹࣗಈతʹηοτͯ͘͠ΕΔͷͰ͋Δ ʮ44ඵ͔͚ͯɺม9Λʹมߋ͢Δʯ ͱ͍͏ײ͡ʹࢦఆ͢Δ 5XFFOΛ͑ɺෳࡶͳಈ͖Ͱ؆୯ʹ ࣮ݱͰ͖Δ
5XFFOͷྫ ඵޙͳΒ ʮඵޙʹʯͷ5XFFO 9
+4ͷ5XFFOϥΠϒϥϦ UXFFOKT IUUQTHJUIVCDPNUXFFOKTUXFFOKT 5XFFO.BY IUUQTHSFFOTPDLDPNUXFFONBY 7FMPDJUZKT IUUQWFMPDJUZKTPSH
·ͨɺ ࠓ·Ͱͷαϯϓϧʹ க໋తͳ͕͋Γ·͢
ͦΕ '14ͷมߋʹऑ͍͜ͱ
'14ͱ 'SBNF1FS4FDPOEͷུ ඵؒʹԿճը໘͕ߋ৽͞ΕΔ͔ͱ͍͏͜ͱ SFRVFTU"OJNBUJPO'SBNF'14ʹͳΔΑ͏ Α͠ͳʹͬͯ͘ΕΔ
ࠓ·Ͱͷαϯϓϧͷ ήʔϜϧʔϓ͕'14લఏͰॻ͔Ε͍ͯΔ '14͕ഒʹͳͬͨΒɺΩϟϥͷҠಈഒ SFRVFTU"OJNBUJPO'SBNFόοςϦʔɺ ϒϥβͷΞΫςΟϒঢ়ଶͳͲͰ'14ҎԼʹ ͳΔ͜ͱ͕͋Δ
ͳͥ5XFFOͰղܾ͢Δͷ͔ 5XFFO։͔࢝Βͷܦա࣌ؒʹͷΈґଘ͔Β ؒʹԿճߋ৽Λڬ͏͕ɺ։͔࢝ΒඵޙͳΒ ৗʹಉ͡ʹͳΔ ࣍Ͱ۩ମྫΛղઆ
ඵ ඵ ̎ඵ ̍ϑϨʔϜ͝ͱʹ ͢Δ 9 9
࣌ؒ ࣌ؒ 9 9 9
ඵ ඵ ̎ඵ ʮඵͰʯͷ5XFFOΛ͏ 9 9 ࣌ؒ
࣌ؒ 9 9 9