åäŸãã¡ã¯çŸä»£ã®æè¡ã倧奜ãã§ãã ã¿ãªããã¯ããèªèº«ã§ã
ãããªã§ããåäŸãã¡ãã¹ããŒããã©ã³ãã¿ãã¬ãããã©ã®ããã«äœ¿çšããŠããããèŠãã«éããããŸããã ãããã®åäŸãã¡ã¯é©åã«ã "ã®
äžä»£ ããšåŒã°ããŠããŸããã 圌ãã¯å€ã®è¶ã®ãããªã¢ãã€ã«æ©åšã®ãã£ã¹ãã¬ã€ã®å
ã«ã矀ãããã åäŸããã¬ã€ããã²ãŒã ã®å€ãã¯éåžžã«ç°¡åã«äœæã§ããŸãã ãããããã®ãããªåçŽãªã¢ããªã±ãŒã·ã§ã³ã§ããæ·±å»ãªãããžã§ã¯ãã«æé·ããå¯èœæ§ããããŸãã
ãã§ã€ã¶ãŒ
ãã®ã¬ã€ãã§ã¯ã
Phaser HTML5ã©ã€ãã©ãªã䜿çšããŠãèŸ²å Žã«äœãåç©ãé³¥ã«é¢ããã¹ã©ã€ããŒã²ãŒã ãäœæããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãã®ãããžã§ã¯ãã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ã®æºã¯ãFisher-Price Androidã²ãŒã ã®
Animal Sounds for Babyã§ããã
Phaserã¯ã2Dã²ãŒã ãéçºããããã®ç¡æã®æ¥œããåŠã¶ã¹ãHTML5ãã¬ãŒã ã¯ãŒã¯ã§ãã ãªãã£ãŒãã»ãã€ããŒïŒãªãã£ãŒãã»ãã€ãŽã£ãŒïŒã«ãã£ãŠäœæãããŸãããPhaserãéçºè
ã®çŽ æŽãããã³ãã¥ããã£ã圢æããŠããŸãã 圌ãã¯éåžžã
HTML5 Game Devsãã©ãŒã©ã ã§ãã£ããã
ãŸã ã
ã²ãŒã ç»é¢ã³ãŒããšã²ãŒã ã®ãªãœãŒã¹
ãããžã§ã¯ãã®ã³ãŒããšãªãœãŒã¹ãããŠã³ããŒãã§ããŸããéçºã«ã€ããŠã¯
ãããããããããããŠã³ããŒãã§ããŸãã ãããŠãããã
GitHubãªããžããªã§ã ã
ã²ãŒã ã®ã°ã©ãã£ãã¯ã¹ã¯ç§ã®äŒç€Ÿ
Zenvaãäœæããããšã«æ³šæããŠãã ããã åçšããã³éåçšãããžã§ã¯ãã«ç»åã䜿çšã§ããŸãããåž°å±ã¯å¿
èŠãããŸããïŒãã ããããããã¹ãŠããCandy Crashã®ãããªæ¬¡ã®ããããäœæããå Žåã¯ã倧éžå®
ã賌å
¥ããŠãã ããïŒã
ãããžã§ã¯ãã®èæ¯ãšåææ¡ä»¶
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãPhaserã䜿çšããŠãåäŸåãã®ã¯ãã¹ãã©ãããã©ãŒã ã²ãŒã ãäœæããŸãã ãŸããApache Cordovaãš
Intel XDKã䜿çšããŠãAndroidãã©ãããã©ãŒã çšã®ã¢ããªã±ãŒã·ã§ã³ããšã¯ã¹ããŒãããããšãæ€èšããŠããŸãã
èªã¿å§ãããšãã«ã¯ãåºæ¬çãªJavaScriptéçºã¹ãã«ãããããšãåæãšããŠããŸãã ããã§ãªãå Žåã¯ããŸãJSã®åºæ¬ãçè§£ããããšããå§ãããŸãã ããšãã°ã
Zenva Academyã® JavaScriptã³ãŒã¹ã
åè¬ãããšãå¿
èŠãªç¥èããã°ããç¿åŸã§ããŸãã
ãã®ã¬ã€ããç¿åŸããããã«ãPhaserãCordovaãAndroidã®çµéšã¯å¿
èŠãããŸããã ã²ãŒã éçºã®ç¥èã«ã€ããŠãåãããšãèšããŸãã
Phaserã«åºã¥ããŠäœæãããã²ãŒã ã¯ããã©ãŠã¶ã§Index.htmlãã¡ã€ã«ãéãã ãã§ã¯éå§ã§ããŸããã éåžžã®æäœã«ã¯ãWebãµãŒããŒãå¿
èŠã§ãã Phaserã²ãŒã ã¯ãCordova APIã䜿çšããªãå Žåãéåžžã®ããŒã«ã«WebãµãŒããŒã䜿çšããŠèµ·åã§ããŸãã ããšãã°ãWindowsã§ã¯WAMPãMacã§ã¯MAMPã§ãã Pythonã®åçŽãªHTTPãµãŒããŒãŸãã¯Node.jsã®http-serverããã±ãŒãžã䜿çšã§ããŸãã
ããã«ã
Intel XDKã
Bracketsãšãã£ã¿ãŒãªã©ã®äžéšã®éçºç°å¢ã«ã¯çµã¿èŸŒã¿ã®WebãµãŒããŒãä»å±ããŠããããããããã®ããŒã«ã䜿çšãããšãå¥åã®ãµãŒããŒãã€ã³ã¹ããŒã«ããå¿
èŠããããŸããã
ããã«ã¡ã¯äžçïŒ
æ€èšäžã®Phaserãããžã§ã¯ãã®åºç€ã¯ãã²ãŒã ã³ãŒããå«ãŸããPhaserã©ã€ãã©ãªãšã¹ã¯ãªãããæ¥ç¶ãããIndex.htmlãã¡ã€ã«ã®åœ¢åŒã§æç€ºãããŸãã Index.htmlã¯æ¬¡ã®ããã«ãªããŸãã
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" /> <title>Learn Game Development at ZENVA.com</title> <script type="text/javascript" src="js/phaser.js"></script> <style> body { padding: 0px; margin: 0px; background: black; } </style> </head> <body> <script src="js/main.js"></script> </body> </html>
main.jsã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã ããã§ããããŸã§ã®ãšãã-ã¡ãœããã®ç©ºçœã®ã¿ã
// var GameState = { // init: function() { }, // preload: function() { }, // , create: function() { }, // update: function() { } }; // Phaser var game = new Phaser.Game(640, 360, Phaser.AUTO); // game.state.add('GameState', GameState); // game.state.start('GameState');
ææ°ã®Intel XDKã䜿çšããŠããå ŽåãPhaserãã³ãã¬ãŒãã䜿çšããŠã¹ã¿ãŒã¿ãŒãããžã§ã¯ããçæã§ããŸãã ãããè¡ãã«ã¯ã[ãããžã§ã¯ã]ã¿ãã§[æ°ãããããžã§ã¯ãã®éå§]ãã¯ãªãã¯ãã[ãã³ãã¬ãŒã]ã°ã«ãŒããå±éããŠã[ã²ãŒã ]ãéžæãããã³ãã¬ãŒãã®ãªã¹ããã[ãã§ã€ã¶ãŒ]ãéžæããŸãã æåã«è¡ãããšã¯ãIntel XDKã®å Žåãšå°ãç°ãªããŸãããäœãèµ·ãã£ãŠãããã®æ¬è³ªãå€ããããšã¯ãããŸããã
ããŒã«ã«WebãµãŒããŒã䜿çšããŠãã©ãŠã¶ãŒã§Index.htmlãããŠã³ããŒããïŒäžèšã§èª¬æããŸããïŒããã©ãŠã¶ãŒã³ã³ãœãŒã«ãéããšãPhaserã®æ£åžžãªåæåã«é¢ããæ
å ±ã確èªã§ããŸãã
æåããPhaseråæåã¹ãã©ã€ã
ç»åããŸãã¯ã²ãŒã æ¥çã§äžè¬çã«åŒã°ããŠããããã«ããã¹ãã©ã€ããã¯2Dã²ãŒã ã®æ¯æ¥ã®ãã³ã§ãã Phaserã¯ã¹ãã©ã€ãã䜿çšããŠãèæ¯ãã²ãŒã ã®ãã£ã©ã¯ã¿ãŒãããã³ã»ãŒãã¹ãŠã®ã²ãŒã ã°ã©ãã£ãã¯ã衚瀺ããŸãã ã¹ãã©ã€ãã䜿çšããããã€ãã®äŸãèŠãŠã¿ãŸãããã
ãã¯ã¹ãã£ã®ããªããŒã
ç»é¢ã«ã¹ãã©ã€ãã衚瀺ããåã«ããã®ã¹ãã©ã€ãã«é¢é£ä»ããããŠããç»åãã¡ã€ã«ãããŠã³ããŒãããå¿
èŠããããŸãã ãã£ã¹ã¯ãããã¡ã€ã«ãããŠã³ããŒãããã«ã¯æéãããããŸãããããã€ã¹ã®RAMããç»åãããŠã³ããŒãããããšã¯ã»ãŒç¬æã«è¡ãããŸãã ã²ãŒã ãªãœãŒã¹ãããªããŒããããšãå¿
èŠãªãã®ããã¹ãŠãã£ã¹ã¯ããããŒããããRAMã«é
眮ãããŸãã ãã®çµæãç»åãªã©ãå¿
èŠã«ãªã£ããšãã«ç»é¢ã«è¡šç€ºããããé³ã®å Žåã¯ç¬ãããŠåçãããã§ããŸãã
WebããŒãžãå®å
šã«ããŒããããªãå ŽåããããŸãããããã¹ããšäžéšã®ç»åã®ã¿ã衚瀺ã§ããããšã«æ°ã¥ããŸãããïŒ ããã¯ãç»åã衚瀺ããåã«ãµãŒããŒããããŠã³ããŒãããå¿
èŠãããããã§ãã ããã¯Webãµã€ãã§ã¯æ®éã®ããšã§ã誰ããããã«æ
£ããŠããŸãããã²ãŒã ã§ã¯ããã¯åã«åãå
¥ããããŸããïŒ ç»åãèªã¿èŸŒãŸããªãã£ããã£ã©ã¯ã¿ãŒã®ä»£ããã«é»ãé·æ¹åœ¢ã§ãæ°ã«å
¥ãã®ã²ãŒã ãæ³åããŠãã ããã
ãããã£ãŠãGameStateãªããžã§ã¯ãã®preloadïŒïŒã¡ãœããã§ãç»åããµãŠã³ããªã©ã®ä»ã®ã²ãŒã ãªãœãŒã¹ãããªããŒãããããšããå§ããŸãããã å€èŠ³ã¯æ¬¡ã®ãšããã§ãã
preload: function() { this.load.image('background', 'assets/images/background.png'); this.load.image('chicken', 'assets/images/chicken.png'); }
This.loadã³ãã³ãã¯ãPhaserãšã³ãžã³ã«ãã£ãŠåæåãããããŒããŒãšåŒã°ãããªããžã§ã¯ããåŒã³åºããŸãã ãã®ãªããžã§ã¯ãã«ã¯ãããŸããŸãªã¿ã€ãã®ã²ãŒã ãªãœãŒã¹ãããŒãããããã®ããŸããŸãªã¡ãœãããè£
åãããŠããŸãã 詳现ã«ã€ããŠã¯ã
ããã¥ã¡ã³ããåç
§ããŠãã ããã æåã®ãã©ã¡ãŒã¿ãŒã¯ãªãœãŒã¹ã®ããŒã§ãã ããŒã«ã¯ä»»æã®ãã®ã䜿çšã§ããŸãããäž»ãªããšã¯åãããŒãç°ãªããªãœãŒã¹ã«èšå®ããªãããšã§ãã ç¹å®ã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã«ãããŒã¯ã²ãŒã ã³ãŒãã§äœ¿çšãããŸãã
ã¹ãã©ã€ã衚瀺
ç»é¢ã«ã¹ãã©ã€ãã衚瀺ããã«ã¯ãGameStateãªããžã§ã¯ãã®createïŒïŒã¡ãœããã«é©åãªã³ãŒãã远å ããå¿
èŠããããŸãã ãã®ã¡ãœããã¯ãå¿
èŠãªãã¹ãŠã®ã²ãŒã ãªãœãŒã¹ãèªã¿èŸŒãŸããåŸã«1åå®è¡ãããŸãã
// , create: function() { this.background = this.game.add.sprite(0, 0, 'background'); this.chicken = this.game.add.sprite(100, 100, 'chicken'); },
ç»é¢äžã®ã¹ãã©ã€ãã¯ãXããã³Yã®å€ã«ãã£ãŠæ±ºå®ãããæå®ããã座æšã«é
眮ãããŸãã座æšç³»ã¯ãã²ãŒã ã¯ãŒã«ãã®å·Šäžé
ããå§ãŸããŸãã Yå€ã¯äžããäžãžãXã¯å·Šããå³ãžå¢å ããŸãã
åç¹ã¯å·Šäžé
ã«ãããŸãäžèšã®ã³ãŒãã§åæåãããã¹ãã©ã€ãã®è¡šç€ºã¯æ¬¡ã®ããã«ãªããŸãã
Intel XDKãšãã¥ã¬ãŒã¿ãŒã«è¡šç€ºãããã¹ãã©ã€ãåºæºç¹
æå®ããã座æšïŒxãyïŒã«é
眮ãããã¹ãã©ã€ããã€ã³ãã¯ãã¢ã³ã«ãŒãã€ã³ããšåŒã°ããŸãã ããã©ã«ãã§ã¯ãã¹ãã©ã€ãã®åç
§ç¹ã¯å·Šäžé
ã«å¯Ÿå¿ããŠããŸãã ãããã£ãŠãã¹ãã©ã€ãã®äœçœ®ããããšãã°ïŒ10.10ïŒã«èšå®ãããšããã®å·Šäžé
ãæå®ãããäœçœ®ã«ãªããŸãã
ã¹ãã©ã€ããå転ããããšãã¢ã³ã«ãŒãã€ã³ããå転ã®äžå¿ã«ãªããŸãã ããã«ãã¹ãã©ã€ãã®ãµã€ãºã倿ŽããŠæ¡å€§çž®å°ãããšãã¹ãã©ã€ãã¯å¢æžããŸãããã¢ã³ã«ãŒãã€ã³ãã¯å€æãéå§ãããåã®äœçœ®ã«æ®ããŸãã
ã¹ãã©ã€ãã®åç
§ãã€ã³ãã倿Žããå¿
èŠãããå ŽåããããŸãã ããšãã°ãäžå¿ãåç
§ããŠã¹ãã©ã€ãã®äœçœ®ãèšå®ããå¿
èŠãããå Žåã 以äžã«ç€ºãããã«ããããè¡ãããšãã§ããŸãïŒã¹ãã©ã€ãã衚瀺ããåŸïŒã
// // : this.chicken.achor.setTo(0.5); this.chicken.anchor.setTo(0.5, 0.5);
ã¢ã³ã«ãŒãã€ã³ãã倿ŽããåŸã®ã¹ãã©ã€ãã¹ãã©ã€ãã®å転
ã¹ãã©ã€ãã®å転ã¯éåžžã«ç°¡åã§ãã ãããè¡ãã«ã¯ããã®è§åºŠããããã£ïŒå転è§åºŠïŒã倿Žããã ãã§ãã å転ã¯ãåºæºç¹ã®åšãã§è¡ãããŸãïŒãã®å Žåãã¹ãã©ã€ãã®äžå¿ã®åšãïŒã å転è§åºŠã¯åºŠã§èšå®ãããŸãã ããšãã°ãã¹ãã©ã€ãã90床å転ãããæ¹æ³ã§ãã
this.chicken.angle = 90;
90床ã®ã¹ãã©ã€ãå転ã¹ãã©ã€ãã®ãµã€ãºå€æŽ
ã¹ãã©ã€ãã®scaleããããã£ã䜿çšãããšããµã€ãºã倿Žã§ããŸãã æ¬¡ã«ãã¹ã±ãŒãªã³ã°ã®äŸã瀺ããŸãïŒã¹ãã©ã€ãã¯ãå転åã®ç¶æ
ã«ä»¥åã«æ»ãããŸããïŒã
ã¹ãã©ã€ããåçŽã«åŒã䌞ã°ããŸãã
this.chicken.scale.setTo(3,1);
瞊ã«äŒžã³ãã¹ãã©ã€ãã¹ãã©ã€ãã®ãµã€ãºãååã«æžãããŸãã
this.chicken.scale.setTo(0.5)
ã¹ãã©ã€ãã¯ååã«ãªããŸãã¹ãã©ã€ãã®åå°
X軞ãŸãã¯Yè»žã«æ²¿ã£ãŠã¹ãã©ã€ããåæ ããå¿
èŠãããå Žåãscaleããããã£ãèšå®ãããšãã«è² ã®å€ãèšå®ããããšã§ãããè¡ãããšãã§ããŸãã ããšãã°ãXè»žã«æ²¿ã£ãŠå€-1ãæå®ãããšãã¹ãã©ã€ãã¯ãã®è»žã«æ²¿ã£ãŠåæ ãããŸããããµã€ãºã¯å€æŽãããŸããã -1以å€ã®è² ã®å€ã䜿çšãããšãåå°ãšãµã€ãºå€æŽã®2ã€ã®å¹æããããŸãã
Xè»žã«æ²¿ã£ãŠã¹ãã©ã€ããåæ ããŸãã
this.chicken.scale.setTo(-1,1);
X軞ã¹ãã©ã€ãã²ãŒã ã¯ãŒã«ãã®äžå¿ãžã®ã¹ãã©ã€ãã®é
眮
ã¹ãã©ã€ãã®åºæºç¹ãäžå¿ã«èšå®ããç»é¢ã®äžå¿ãã¹ãã©ã€ãã®æ°ãã座æšãšããŠæå®ããããšã«ãããã¹ãã©ã€ããã²ãŒã ã¯ãŒã«ãã®äžå¿ã«é
眮ããã®ãæãç°¡åã§ãã ããšãã°ã次ã®ããã«ã§ããŸãã
// this.chicken = this.game.add.sprite(this.game.world.centerX, this.game.world.centerY, 'chicken'); // this.chicken.anchor.setTo(0.5, 0.5);
xããã³yããããã£ã®å€ãç·šéããããšã«ãããç»é¢äžã®ã¹ãã©ã€ãã®äœçœ®ããã€ã§ã倿Žã§ããŸãã
äžèšã§èª¿ã¹ãSpriteã¯ã©ã¹ãšãã®ã¡ãœãããšããããã£ã®è©³çްã«ã€ããŠã¯ã
ããã¥ã¡ã³ããåç
§ããŠãã ãã ã
ã²ãŒã ç»é¢ã®ãµã€ãºãããã€ã¹ã®ç»é¢ãµã€ãºã«èª¿æŽãã
ã²ãŒã ãéçºãããŠãããã©ââãããã©ãŒã ã«é¢ä¿ãªãããããã«ããŠããç°ãªãè§£å床ãšã¢ã¹ãã¯ãæ¯ã«å¯ŸåŠããå¿
èŠããããŸãã ãããçŸå®ã§ãã æè¿ã§ã¯ãããã¯HTML5ã²ãŒã ã®éçºè
ã«ãšã£ãŠæ¬åœã®æªå€¢ã§ããããã»ãšãã©ã®ã²ãŒã ãšã³ãžã³ã¯ããŸããŸãªç»é¢ã«é¢é£ããåé¡ãåŠçããŸãã PhaserãäŸå€ã§ã¯ãããŸãããããããçš®é¡ã®ç»é¢ããµããŒãããçµã¿èŸŒã¿æ©èœãå«ãŸããŠãããããŸããŸãªããã€ã¹ã§æ£åžžã«åäœããã²ãŒã ãäœæã§ããŸãã Phaserã®ãã®ãã¹ãŠã¯ã
Scale Managerãªããžã§ã¯ãã«ãã£ãŠåŠçãããŸãã
ã²ãŒã ç»é¢ã¯ãããã€ã¹ã®ç»é¢ãµã€ãºã«å¿ããŠãµã€ãºã倿Žãããã¢ã¹ãã¯ãæ¯ãç¶æãããŸãã ãºãŒã ãããŒãžã£ãŒã®ãã®ã¢ãŒãã¯ãSHOW_ALLãšåŒã°ããŸãã èšå®ã¯initïŒïŒã¡ãœããã§è¡ãããŸãã
// init: function() { // this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL; // this.scale.pageAlignHorizontally = true; this.scale.pageAlignVertically = true; },
ç»é¢äžã®ã²ãŒã ãã²ãŒã ç»é¢ã®ãã©ã¡ãŒã¿ãŒãšã¯ç°ãªããã©ã¡ãŒã¿ãŒç¢å°ã远å ãã
ã²ãŒã ç»é¢ã«ç¢å°ã远å ããŠãèŸ²å Žã®äœæ°ãåãæ¿ããããšãã§ããŸãã ãŠãŒã¶ãŒãç¢å°ãã¿ãããããšãç»é¢ã«è¡šç€ºãããã¯ãªãŒãã£ãŒãå³ãŸãã¯å·Šã«ç§»åããæ°ããã¯ãªãŒãã£ãŒãç»é¢ã®äžå€®ã«çœ®ãæãããŸãã
次ã«ãç¢å°ã¹ãã©ã€ãã远å ããŠããããã®ããããã£ã®äžéšãæ§æããŸãã ãŸããpreloadïŒïŒã¡ãœããã§ãã¯ã¹ãã£ãããªããŒãããŸãã
this.load.image('arrow', 'assets/images/arrow.png');
次ã«ãcreateïŒïŒã¡ãœããã§ãæ¬¡ã®æäœãè¡ããŸãã
// this.leftArrow = this.game.add.sprite(60, this.game.world.centerY, 'arrow'); this.leftArrow.anchor.setTo(0.5); this.leftArrow.scale.x = -1; this.leftArrow.customParams = {direction: -1}; // this.rightArrow = this.game.add.sprite(580, this.game.world.centerY, 'arrow'); this.rightArrow.anchor.setTo(0.5); this.rightArrow.customParams = {direction: 1};
ããã§ãç¢å°ããšã«1ã€ãã€ã2ã€ã®ã¹ãã©ã€ããäœæããŸãã ã©ã¡ããåããã¯ã¹ãã£ã䜿çšããŠãããããŠã³ããŒããããã®ãããŒãšããŠãç¢å°ããæå®ããŠããŸãã ã¹ãã©ã€ããã²ãŒã ã¯ãŒã«ãã®Y軞ã®äžå¿ã«æ£ç¢ºã«é
眮ãããŠããããšãã¢ã³ã«ãŒãã€ã³ããã¹ãã©ã€ãã®äžå¿ã«èšå®ãããŠããããšãããã³ã¹ã±ãŒã«ããããã£ã䜿çšããŠæåã®ç¢å°ãå·Šãæãããã«å転ããŠããããšã«æ³šç®ããŠãã ããã
远å ã®ã¹ãã©ã€ããªãã·ã§ã³
Xè»žã«æ²¿ã£ãç¢å°ã®æ¹åã«é¢ããæ
å ±ãå«ããç¢å°ã¹ãã©ã€ãçšã®è¿œå ãã©ã¡ãŒã¿ãŒãäœæããŸããã·ã¹ãã ã«ãã£ãŠæäŸãããªãç¬èªã®ããããã£ãèšå®ããã«ã¯ãthis.rightArrow.anythingHereã³ã³ã¹ãã©ã¯ãã䜿çšã§ããŸãã ãã ãããããã®è¿œå ããããã£ãå¥ã®ãªããžã§ã¯ãã«ä¿åãããcustomParamsããšããååãä»ããŸãã ãªããããããŠããã®ã§ããïŒ ããšãã°ãPhaserã«ååãªç¥èããªãããscaleããšãããªããžã§ã¯ãã®è¿œå ããããã£ãäœæããããšã«ããå Žåã¯ã©ããªããŸããïŒ ç¥ã£ãŠããããã«ãã¹ã±ãŒã«ã¯ã¹ãã©ã€ãã®æšæºããããã£ã®1ã€ã§ãããåããã®ããã1ã€äœæããã®ã§ãç¹å®ã®å€ãèšå®ããããšã§æšæºã®ãã®ãåçŽã«çœ®ãæããŸãã ãã®çµæãçè§£ãã«ããåé¡ããšã©ãŒãæ€åºããã®ã¯éåžžã«å°é£ã§ãã ãã®ããããã¹ãŠã®è¿œå ããŒã¿ãå¥ã®ãªããžã§ã¯ãã«ä¿åãããã®ååãã¹ãã©ã€ããªããžã§ã¯ãã«æ¢ã«ãããã®ãšäžèŽããªãããšãå®å
šã«ç¢ºä¿¡ããŠä¿åããããšã奜ã¿ãŸãã

ã²ãŒã ç»é¢äžã®ç¢å°å
¥ååŠç
ä»ãç»é¢äžã«äžå¯Ÿã®ç¢å°ãšåããªãé¶ãããŸãã åŸã§ã代ããã«ãã¡ãŒã å
šäœãååšããŸãã ãã ãããšããããã¯é¶ããã®ãŸãŸã«ããŠãããå
¥ååŠçãè¡ããŸãã
éå§ããã«ã¯ãã¿ãããšããŠã¹ã¯ãªãã¯ã«å¿çããé³¥ãã€ã³ã¿ã©ã¯ãã£ãã«ããŸãããã
this.chicken = this.game.add.sprite(this.game.world.centerX, this.game.world.centerY, 'chicken'); // this.chicken.anchor.setTo(0.5, 0.5); // , â this.chicken.inputEnabled = true; // this.chicken.input.pixelPerfectClick = true; // this.chicken.events.onInputDown.add(this.animateAnimal, this);
ããã§ãGameStateãªããžã§ã¯ãã«animateAnimalã¡ãœãããäœæããå¿
èŠããããŸãã ã¢ãã¡ãŒã·ã§ã³ãéå§ããããµãŠã³ããåçãããŸãã
// animateAnimal: function(sprite, event) { console.log('animate animal and play sound'); },
äž¡æ¹ã®ç¢å°ã®å
¥åã€ãã³ãåŠçããªã³ã«ããŸãã
// this.leftArrow = this.game.add.sprite(60, this.game.world.centerY, 'arrow'); this.leftArrow.anchor.setTo(0.5); this.leftArrow.scale.x = -1; this.leftArrow.customParams = {direction: -1}; // this.leftArrow.inputEnabled = true; this.leftArrow.input.pixelPerfectClick = true; this.leftArrow.events.onInputDown.add(this.switchAnimal, this); // this.rightArrow = this.game.add.sprite(580, this.game.world.centerY, 'arrow'); this.rightArrow.anchor.setTo(0.5); this.rightArrow.customParams = {direction: 1}; // this.rightArrow.inputEnabled = true; this.rightArrow.input.pixelPerfectClick = true; this.rightArrow.events.onInputDown.add(this.switchAnimal, this);
空ã®ç¶æ
ã§switchAnimalã¡ãœããã远å ããŸãã
// , sprite , switchAnimal: function(sprite, event) { console.log('switch animal'); }
ããã§ãç¢å°ãŸãã¯é¶ãã¯ãªãã¯ãããšã察å¿ããã¡ãã»ãŒãžãã³ã³ãœãŒã«ã«è¡šç€ºãããŸãã
ã°ã«ãŒã
ã¹ãã©ã€ãã»ããã®æäœã¯ãã²ãŒã éçºã§äœ¿çšãããäžè¬çãªææ³ã§ãã ããšãã°ãå€ãã®æµãããå®å®è¹ã«é¢ããã²ãŒã ã æ°ããæµãç»é¢ã«è¡šç€ºãããç Žå£ãããæµã®è¹ãã²ãŒã ã®äžçãšçããçžäºäœçšããŸãã å€ãã®æäœã¯ãåæµã«å¯ŸããŠåå¥ã«å®è¡ããã®ã§ã¯ãªããäžéšã®ã°ã«ãŒãã«å¯ŸããŠããã«å®è¡ããæ¹ã䟿å©ã§ãããšæ³å®ããã®ãè«ççã§ãã
ã²ãŒã ã«ã¯åç©ãšé³¥ã®ã»ããããããŸãã ç¢å°ãã¿ã³ã䜿çšããŠããã¡ãŒã ã®æ¬¡ã®å±
äœè
ã«åãæ¿ããããåã®å±
äœè
ã«æ»ãããšãã§ããŸãã ã²ãŒã ãªããžã§ã¯ããæäœããããã«ãã°ã«ãŒãã䜿çšããŸãã
åã¯ãªãŒãã£ãŒã®äžæã®ããŒã¿ïŒååããã¯ã¹ãã£ããµãŠã³ããã¢ãã¡ãŒã·ã§ã³ïŒã¯ããªããžã§ã¯ãã®é
åãšããŠã²ãŒã ã«è¡šç€ºãããŸãã ãã®ãããªã¢ã¬ã€ã¯ãçè«çã«ã¯ãç¹å®ã®WebãµãŒããŒãŸãã¯ããŒã«ã«ã¹ãã¬ãŒãžããæ¢è£œã§ããŠã³ããŒãã§ããŸãã ãã®ããŒã¿ã䜿çšããŠãã¹ãã©ã€ããäœæããããããã°ã«ãŒãã«çµåããŸãã
å¥ã®ã¹ãã©ã€ãã§é¶ã«å¥ããåãããªããžã§ã¯ãã®ã°ã«ãŒãã§ã®äœæ¥ã«é²ã¿ãŸãã ãããã®ç»åãããªããŒãããããšããå§ããŸãããã
preload: function() { this.load.image('background', 'assets/images/background.png'); this.load.image('arrow', 'assets/images/arrow.png'); this.load.image('chicken', 'assets/images/chicken.png'); this.load.image('horse', 'assets/images/horse.png'); this.load.image('pig', 'assets/images/pig.png'); this.load.image('sheep', 'assets/images/sheep.png'); },
createã¡ãœããã§ã¯ãç¢å°ã«é¢é£ããã³ãŒããŸã§ãã¹ãŠãåé€ããæ¬¡ã®ãã®ãããã«è²Œãä»ããå¿
èŠããããŸãã
// this.background = this.game.add.sprite(0, 0, 'background'); // var animalData = [ {key: 'chicken', text: 'CHICKEN',}, {key: 'horse', text: 'HORSE'}, {key: 'pig', text: 'PIG'}, {key: 'sheep', text: 'SHEEP'} ]; // â this.animals = this.game.add.group(); // var self = this; var animal; animalData.forEach(function(element){ // , animal = self.animals.create(-1000, self.game.world.centerY, element.key, 0); // , Phaser, animal.customParams = {text: element.text, sound: 'to be added..'}; // animal.anchor.setTo(0.5); // , animal.inputEnabled = true; animal.input.pixelPerfectClick = true; animal.events.onInputDown.add(self.animateAnimal, this); }); // this.currentAnimal = this.animals.next(); this.currentAnimal.position.set(this.game.world.centerX, this.game.world.centerY);
ãããç§ãã¡ãä»ãã£ãããšã§ãã
- ãã¡ãŒã ã®äœæ°ã®ãã¹ãŠã®ããŒã¿ãJSONãªããžã§ã¯ããšããŠèšå®ããŸãã ãã®ãããªãªããžã§ã¯ãã¯ãWebãµãŒããŒãŸãã¯ããŒã«ã«ã¹ãã¬ãŒãžããããŠã³ããŒãã§ããŸãããŸããäžéšã®ã²ãŒã ã§ã¯ãããã°ã©ã ã§çæã§ããŸã
- ãªããžã§ã¯ãã®ã°ã«ãŒããäœæããŸããã
- èŸ²å Žã®äœæ°ã«å¿ããŠãµã€ã¯ã«ãå®è¡ããããããã®ã¹ãã©ã€ããäœæããã°ã«ãŒãã«äœãèµ·ãã£ãã®ãã远å ããŸããã
- åã¹ãã©ã€ãã«ã€ããŠãå
¥ååŠçããªã³ã«ãªããã³ãŒã«ããã¯é¢æ°ãèšå®ãããŸãããããã¯ããŠãŒã¶ãŒãã²ãŒã ãªããžã§ã¯ããæäœãããšãã«æ©èœããã¯ãã§ãã
- nextïŒïŒã¡ãœããã䜿çšããŠã°ã«ãŒãããæåã®ã¯ãªãŒãã£ãŒãååŸããç»é¢ã®äžå€®ã«é
眮ããŸããã ã°ã«ãŒãã䜿çšãããšãnextïŒïŒããã³previousïŒïŒã³ãã³ãã䜿çšããŠãã°ã«ãŒãã«å«ãŸãããªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã
䜿çšããGroupã¯ã©ã¹ã®è©³çްã«ã€ããŠã¯ã
ãã¡ããã芧ãã ãã ã
è£éã¢ãã¡ãŒã·ã§ã³
ããã¥ã€ãŒã³ããšåŒã°ããããšã®å€ãè£éã¢ãã¡ãŒã·ã§ã³ã¯ãéå§ãã¬ãŒã ãšçµäºãã¬ãŒã ãèšå®ããã¢ãã¡ãŒã·ã§ã³ã®ã¢ãããŒãã§ãããäžéãã¬ãŒã ã¯ã·ã¹ãã ã«ãã£ãŠèªåçã«çæãããŸãã ãããã£ãŠããéã«ããã圢æãããããã¥ã€ãŒã³ããšããçšèªã¯ããéã«ããšããŠç¿»èš³ããããšãã§ããŸãã
ããšãã°ãããŒã«ã®äœçœ®ã¯x = 10ã§ãã 10ç§éã®ã¢ãã¡ãŒã·ã§ã³åãããåãã®çµããã«ã圌ã¯x = 100ã®äœçœ®ã«ããããšã«ããŸããã ãã®çµæãããŒã«ã¯æå®ãããæéå
ã«åæäœçœ®ããæçµäœçœ®ãŸã§ã¹ã ãŒãºã«ç§»åããŸãã åæã«ãã¢ãã¡ãŒã·ã§ã³ã®ç¶ç¶æéã ãã§ãªããåæäœçœ®ãšæçµäœçœ®ã®ã¿ãèšå®ããŸãã
Phaserã«ã¯ãè£éã¢ãã¡ãŒã·ã§ã³ã®çµã¿èŸŒã¿ãµãã·ã¹ãã ãå«ãŸããŠããŸãïŒããã¥ã¡ã³ãã®
Tweenã¯ã©ã¹ã®èª¬æã
ã芧ãã ãã ïŒã Spriteã¯ã©ã¹ã®ãªããžã§ã¯ãã®ã»ãŒãã¹ãŠã®ããããã£ããŸãã¯è€æ°ã®ããããã£ãåæã«ã¢ãã¡ãŒã·ã§ã³åã§ããŸãã
èŸ²å Žã®äœæ°ã®åããæåããæåŸãŸã§ã¢ãã¡ãŒã·ã§ã³åããŸãã ããã«ãã¢ãã¡ãŒã·ã§ã³ãçµäºãããšãã«å®è¡ãããã³ãŒã«ããã¯é¢æ°ãèšå®ã§ããŸãã
åç©ãé³¥ãç»é¢äžãåãåã£ãŠãããšãã«ãç¢å°ãã¯ãªãã¯ããæ©èœããªãã«ããŸãã ãã®çµæããŠãŒã¶ãŒã¯ã¢ãã¡ãŒã·ã§ã³äžã«ç¢å°ãã¯ãªãã¯ã§ããªããªããŸãïŒãããè¡ããªããšãããªãããããããšãããããŸããã詊ããŠã¿ãŠãã ããïŒã
äžèšã§ãã¬ãŒã ã¯ãŒã¯ãäœæãããswitchAnimalã¡ãœããã¯ã次ã®ããã«ãªããŸãã
// switchAnimal: function(sprite, event) { // , if(this.isMoving) { return false; } this.isMoving = true; var newAnimal, endX; //, , if(sprite.customParams.direction > 0) { newAnimal = this.animals.next(); newAnimal.x = -newAnimal.width/2; endX = 640 + this.currentAnimal.width/2; } else { newAnimal = this.animals.previous(); newAnimal.x = 640 + newAnimal.width/2; endX = -this.currentAnimal.width/2; } // , x var newAnimalMovement = game.add.tween(newAnimal); newAnimalMovement.to({ x: this.game.world.centerX }, 1000); newAnimalMovement.onComplete.add(function() { this.isMoving = false; }, this); newAnimalMovement.start(); var currentAnimalMovement = game.add.tween(this.currentAnimal); currentAnimalMovement.to({ x: endX }, 1000); currentAnimalMovement.start(); this.currentAnimal = newAnimal; },
ã³ãŒããããããããã«ãè£éã¢ãã¡ãŒã·ã§ã³ãæäœããããã®éåžžã®æé ã¯ããã€ãã®ã¹ãããã§æ§æãããŠããŸãã
- ã¢ãã¡ãŒã·ã§ã³ãå®è¡ããTweenãªããžã§ã¯ããäœæããŸãã
- ã¢ãã¡ãŒã·ã§ã³ããããã£ãèšå®ããå¿
èŠã«å¿ããŠã³ãŒã«ããã¯é¢æ°ãèšå®ããŸãã
- ããã°ã©ã ã®é©åãªå Žæã§ã¢ãã¡ãŒã·ã§ã³ãå®è¡ããŸãã
è£éã¢ãã¡ãŒã·ã§ã³ãã¬ãŒã ã¢ãã¡ãŒã·ã§ã³
ã²ãŒã ã§äœ¿çšã§ããå¥ã®çš®é¡ã®ã¢ãã¡ãŒã·ã§ã³ã¯ããã¬ãŒã ã¢ãã¡ãŒã·ã§ã³ãšåŒã°ããŸãã ãã®ã¢ãããŒãã§ã¯ãã¢ãã¡ãŒã·ã§ã³ã®ããŸããŸãªãã¬ãŒã ãå«ããããããã¹ãã©ã€ãã·ãŒãïŒã¹ãã©ã€ãã·ãŒãïŒãå¿
èŠã§ãã ãã®ãããžã§ã¯ãã«é¢ä¿ããã¹ãã©ã€ããªã¹ãã¯ããã®ãããžã§ã¯ãã®è³æã§å
¥æã§ããŸãã
ã¹ãã©ã€ããªã¹ãã¹ãã©ã€ããªã¹ããããªããŒãããããšããå§ããŸãããã åã
ã®ç»åãããŒããã代ããã«ãã¹ãã©ã€ãã·ãŒããããŒãããŠããµã€ãºãšãã¬ãŒã æ°ãèšå®ããŸãã
// preload: function() { this.load.image('background', 'assets/images/background.png'); this.load.image('arrow', 'assets/images/arrow.png'); this.load.spritesheet('chicken', 'assets/images/chicken_spritesheet.png', 131, 200, 3); this.load.spritesheet('horse', 'assets/images/horse_spritesheet.png', 212, 200, 3); this.load.spritesheet('pig', 'assets/images/pig_spritesheet.png', 297, 200, 3); this.load.spritesheet('sheep', 'assets/images/sheep_spritesheet.png', 244, 200, 3); },
,
Loader .
create() . . , , , , ( 0). , - . «0» â , .
animalData.forEach(function(element){
, Phaser, :
animal.customParams = {text: element.text}; // animal.anchor.setTo(0.5); // animal.animations.add('animate', [0, 1, 2, 1, 0, 1], 3, false); // , animal.inputEnabled = true; animal.input.pixelPerfectClick = true; animal.events.onInputDown.add(self.animateAnimal, this); });
, :
animal.animations.add('animate', [0, 1, 2, 1, 0, 1], 3, false);
B , «animal». («animate» ), . â , , . , , , â . â . (3 ) . , «false», , , . «true», , , . â «false», , , , , .
. animateAnimal.
// animateAnimal: function(sprite, event) { sprite.play('animate'); },
. , , preload().
this.load.audio('chickenSound', ['assets/audio/chicken.ogg', 'assets/audio/chicken.mp3']); this.load.audio('horseSound', ['assets/audio/horse.ogg', 'assets/audio/horse.mp3']); this.load.audio('pigSound', ['assets/audio/pig.ogg', 'assets/audio/pig.mp3']); this.load.audio('sheepSound', ['assets/audio/sheep.ogg', 'assets/audio/sheep.mp3']);
mp3 ogg. , , HTML5, . MP3 OGG . , ,
Audacity . Linux, Windows Mac.
animalData . customParams .
// var animalData = [ {key: 'chicken', text: 'CHICKEN', audio: 'chickenSound'}, {key: 'horse', text: 'HORSE', audio: 'horseSound'}, {key: 'pig', text: 'PIG', audio: 'pigSound'}, {key: 'sheep', text: 'SHEEP', audio: 'sheepSound'} ]; // this.animals = this.game.add.group(); var self = this; var animal; animalData.forEach(function(element){ //
C , :
animal = self.animals.create(-1000, self.game.world.centerY, element.key, 0); // , Phaser, animal.customParams = {text: element.text, sound: self.game.add.audio(element.audio)}; // animal.anchor.setTo(0.5); // animal.animations.add('animate', [0, 1, 2, 1, 0, 1], 3, false); // , animal.inputEnabled = true; animal.input.pixelPerfectClick = true; animal.events.onInputDown.add(self.animateAnimal, this); });
, , , , animateAnimal.
// animateAnimal: function(sprite, event) { sprite.play('animate'); sprite.customParams.sound.play(); },
!
?
Freesound.org , .
Audacity . Freesound.org â , . , . , .
: , .
, , , animalData, .
, . .
showText: function(animal) { // if(!this.animalText) { var style = {font: "bold 30pt Arial", fill: "#D0171B", align: "center"}; this.animalText = this.game.add.text(this.game.width/2, this.game.height * 0.85, 'asdfasfd' , style); this.animalText.anchor.setTo(0.5); } this.animalText.setText(animal.customParams.text); this.animalText.visible = true; }
, . , , Text, ,
.
create â , . . , currentAnimal, , .
// this.currentAnimal = this.animals.next(); this.currentAnimal.position.set(this.game.world.centerX, this.game.world.centerY); this.showText(this.currentAnimal);
, , . visibility. .
// switchAnimal: function(sprite, event) { // , if(this.isMoving) { return false; } this.isMoving = true; // this.animalText.visible = false; var newAnimal, endX; // , , if(sprite.customParams.direction > 0) { newAnimal = this.animals.next(); newAnimal.x = -newAnimal.width/2; endX = 640 + this.currentAnimal.width/2; } else { newAnimal = this.animals.previous(); newAnimal.x = 640 + newAnimal.width/2; endX = -this.currentAnimal.width/2; } // , x var newAnimalMovement = game.add.tween(newAnimal); newAnimalMovement.to({ x: this.game.world.centerX }, 1000); newAnimalMovement.onComplete.add(function() { this.isMoving = false; // this.showText(newAnimal); }, this); newAnimalMovement.start(); var currentAnimalMovement = game.add.tween(this.currentAnimal); currentAnimalMovement.to({ x: endX }, 1000); currentAnimalMovement.start(); this.currentAnimal = newAnimal; },
ããã§ãšãããããŸãïŒ . , â . ,
.
HTML5- : , , . , , , . , â , , .
, Android- Cordova
Intel XDK . Cordova «
How to Build a Virtual Pet Game with HTML5 and Cordova ». API Cordova.
Intel XDK, , . , Projects () Start a New Project > Import Your HTML5 Code Base ( > HTML5-).
, , . , , Test () ( Intel, App Preview, ).
, Android, , Build (). Android, . «Android», â «Crosswalk for Android». , ,
Crosswalk , , webview, Chrome. Android-, ( , Android 4+). â Crosswalk. , . â APK . , Android-, Intel XDK, APK- 1 , , Crosswalk, 20 .
, Android , APK- Google Amazon.
ãããã«
, , .
- . , , , , .
- .
- .
- Phaser.
- .
- .
- .
- HTML5- Android-.
. Phaser, , , .
How to Make a Virtual Pet Game with HTML5 and Cordova ,
How to Make a Sidescroller Game with HTML5 ,
HTML5 Phaser Tutorial â SpaceHipster ,
HTML5 Phaser Tutorial â Top-down Games . â
HTML5- Zenva Academy.
, - , â ! , â
GameDev Academy . .