Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
ゼロからはじめるゲームプログラミング
kaidouji85
June 16, 2018
0
810
ゼロからはじめるゲームプログラミング
kaidouji85
June 16, 2018
Tweet
Share
More Decks by kaidouji85
See All by kaidouji85
サーバレスでネット対戦を作った話
kaidouji85
0
210
TWAでGoogle Playにアプリをリリースしてみた
kaidouji85
0
6
サーバレスでブルーグリーンデプロイしてみた
kaidouji85
0
29
three.jsにスプライトアニメーションが無いから自作した話
kaidouji85
0
30
iOS15にアップデートしたら、WebGLのゲームが動かなくなったので根性で何とかしてみた
kaidouji85
0
140
サードパーティクッキーが使えないとAuth0で毎回ログインしなきゃダメと思ってたけど誤解だった件
kaidouji85
1
380
PWAにIDaaS導入しようと思って検証したら、auth0が最強だと思った件
kaidouji85
0
140
AWS AppRunnerで対戦サーバを作って開発は捗ったけど本番運用は厳しいかもしれない件
kaidouji85
0
99
AWS AppRunnerでJSが動くから味見してみたけど、以外なところに落とし穴があった
kaidouji85
0
180
Featured
See All Featured
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
Side Projects
sachag
450
37k
Statistics for Hackers
jakevdp
781
210k
Done Done
chrislema
174
14k
Why You Should Never Use an ORM
jnunemaker
PRO
47
7k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
The Invisible Customer
myddelton
110
11k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
498
130k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
212
20k
Testing 201, or: Great Expectations
jmmastey
21
5.4k
Faster Mobile Websites
deanohume
294
28k
Fireside Chat
paigeccino
11
1.3k
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