рдлреЗрдЬрд░ рдкрд░ рдлреНрд▓реИрдкреА рдмрд░реНрдб рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдВ


рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╕реНрд╡реАрд░

рд╢реБрдн рджрд┐рди, рд╣реЗрдмреНрд░!

рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ (рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп) рдореИрдВрдиреЗ рдлреНрд▓реИрдкреА рдмрд░реНрдб рдЧреЗрдо рдХрд╛ рдЕрдкрдирд╛ рдХреНрд▓реЛрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╕рднреА рдЗрд╕ рд╣рд╛рде рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗред рдЗрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкреНрд░реЗрд░рдХ рдПрдХ рдЫреЛрдЯрд╛ рд╣реИрдХрд╛рдереЙрди рдерд╛ред "рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ," рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдФрд░ рдЗрд╕ рдЦреЗрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ 2 рджрд┐рдиреЛрдВ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдореИрдВрдиреЗ "рд╕рд╛рдЗрдХрд┐рд▓" рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рдЧреЗрдо рдЗрдВрдЬрди - рдлреЗрдЬрд░ рд▓рд┐рдпрд╛ред

рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЦреЗрд▓ рдХреЗ рджреГрд╢реНрдп рдХреЗ рдЖрд░рдВрдн рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ "рдкреНрд░реАрд▓реЛрдбрд░" рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЦреЗрд▓ рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗред


рдлреЗрдЬрд░ рдХреНрдпрд╛ рд╣реИ?


рдлреЗрдЬрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬ, рдореБрдлреНрдд рдФрд░ рдордЬреЗрджрд╛рд░ рдУрдкрди рд╕реЛрд░реНрд╕ рдЧреЗрдо рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдпрд╣ рддреЗрдЬреА рд╕реЗ 2D рдХреИрдирд╡рд╕ рдФрд░ WebGL рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ Pixi.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдлреЗрдЬрд░ рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрдВ рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЧреЗрдо рдмрдирд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝ рд╣реИред рд╣рдо рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдкреНрд░рддрд┐рдкрд╛рджрди, рднреМрддрд┐рдХреА - рд╣рдо рдЦреЗрд▓ рддрд░реНрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рдкреИрдорд╛рдиреЗ Pixi.js. рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ WebGL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдорд╛рдорд▓реЗ рдореЗрдВ WebGL рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдХреИрдирд╡рд╛рд╕ рдкрд░ред
рдлреЗрдЬрд░ рднреА рддреИрдпрд╛рд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕рдиреНрдирддрд╛ рджреЗрддрд╛ рд╣реИ: рд╕реНрдкреНрд░рд╛рдЗрдЯрдПрдиреАрдореЗрд╢рди, рдЯрд╛рдЗрд▓рдореИрдк, рдЯрд╛рдЗрдорд░, рдЧреЗрдорд╕реНрдЯреЗрдЯ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рднреМрддрд┐рдХ рдЗрдВрдЬрди рдХреЗ рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд░рд┐рдЧрд┐рдмреЙрдбреА, рднреМрддрд┐рдХреА рдЖрджрд┐ред
рдЗрди рдШрдЯрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИред

рд╣рдо рдлреЗрдЬрд░ рдФрд░ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ


рдореИрдВрдиреЗ рдХрдИ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╕реВрдЪреА рдЫреЛрдЯреА рд╣реИ: рдлреЗрдЬрд░, рд╡реЗрдмрдлреЙрдиреНрдЯ рдФрд░ рдХреНрд▓реЗред рдЦреЗрд▓ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, Google рдлреЛрдВрдЯ рдФрд░ рдЙрдЪреНрдЪ рдЕрдВрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд▓реЗ рд╕реЗ рдлреЛрдВрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдлреЙрдиреНрдЯред

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб index.html рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИред
index.html
<!DOCTYPE html> <head> <meta charset="utf-8"> <title>Flappy Bird</title> <link rel="shortcut icon" href="/favicon.ico" /> <style type="text/css"> * { margin: 0; padding: 0; } </style> </head> <body> <script type="text/javascript"> var Clay = Clay || {}; Clay.gameKey = "gflappybird"; Clay.readyFunctions = []; Clay.ready = function(fn) { Clay.readyFunctions.push(fn); }; (function() { var clay = document.createElement("script"); clay.async = true; clay.src = ("https:" == document.location.protocol ? "https://" : "http://") + "clay.io/api/api-leaderboard-achievement.js"; var tag = document.getElementsByTagName("script")[0]; tag.parentNode.insertBefore(clay, tag); })(); </script> <script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/phaser/1.1.4/phaser.min.js"></script> <script src="js/Game.js"></script> </body> </html> 

Index.html рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдл рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ Game.js рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо HTML рдХреА рдПрдХ рднреА рд▓рд╛рдЗрди рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдлреЗрдЬрд░ рд╢рд░реАрд░ рдореЗрдВ рд╕реАрдзреЗ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ Phaser рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдХрдВрдЯреЗрдирд░ рдХреЛ рднреА рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рдлреЛрдВрдЯ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ


Game.js - GameInitialize () рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░, рд╕рднреА рдЧрдгрдирд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдлреЛрдВрдЯ рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдлреЛрдВрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡реЗ рдлреЗрдЬрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, WebFont рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 WebFont.load({ google: { families: ['Press+Start+2P'] }, active: function() { GameInitialize(); } }); 

рд╣рдордиреЗ Google рдлрд╝реЙрдиреНрдЯреНрд╕ рд╕реЗ "рдкреНрд░реЗрд╕ рд╕реНрдЯрд╛рд░реНрдЯ 2P" рдлреЙрдиреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╡реЗрдм" рдХрд╣рд╛ рдФрд░ рдЬрдм рдбрд╛рдЙрдирд▓реЛрдб рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЧреЗрдордЗрдВрдЯрд░рд┐рд▓рд╛рдЗрдЬрд╝ () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред

рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдкреЛрд╕реНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ GameInitialize () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред

рд╕реНрдерд┐рд░рд╛рдВрдХ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ, Phaser.Game рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ, GameStates рдЬреЛрдбрд╝реЗрдВ


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реИрд░рд┐рдПрдмрд▓ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╣реЛрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ "рдорд╛рдиреНрдп" рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдЦреЗрд▓ рд╕реНрдерд┐рд░рд╛рдВрдХ
 var DEBUG_MODE = true, //   SPEED = 180, //   GRAVITY = 1800, //     BIRD_FLAP = 550, //    "" PIPE_SPAWN_MIN_INTERVAL = 1200, //     PIPE_SPAWN_MAX_INTERVAL = 3000, //  AVAILABLE_SPACE_BETWEEN_PIPES = 130, //     ( ) CLOUDS_SHOW_MIN_TIME = 3000, //     CLOUDS_SHOW_MAX_TIME = 5000, //     MAX_DIFFICULT = 100, //         SCENE = '', // ,   .     (    body) TITLE_TEXT = "FLAPPY BIRD", //     HIGHSCORE_TITLE = "HIGHSCORES", //   HIGHSCORE_SUBMIT = "POST SCORE", //        INSTRUCTIONS_TEXT = "TOUCH\nTO\nFLY", //    DEVELOPER_TEXT = "Developer\nEugene Obrezkov\nghaiklor@gmail.com", //    :) GRAPHIC_TEXT = "Graphic\nDmitry Lezhenko\ndima.lezhenko@gmail.com", LOADING_TEXT = "LOADING...", //    WINDOW_WIDTH = window.innerWidth || document.documentElement.clientWidth || document.getElementsByTagName('body')[0].clientWidth, WINDOW_HEIGHT = window.innerHeight || document.documentElement.clientHeight || document.getElementsByTagName('body')[0].clientHeight; 

рд╕рднреА рдирд┐рд░реНрдорд┐рдд рдлреЗрдЬрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдЪрд░реЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
рдлреЗрдЬрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЪрд░
 var Background, //  Clouds, CloudsTimer, //      Pipes, PipesTimer, FreeSpacesInPipes, // ,   "" ,   ""  Bird, // Town, //TileSprite    FlapSound, ScoreSound, HurtSound, // ,     SoundEnabledIcon, SoundDisabledIcon, // \  TitleText, DeveloperText, GraphicText, ScoreText, InstructionsText, HighScoreTitleText, HighScoreText, PostScoreText, LoadingText, //   PostScoreClickArea, //     isScorePosted = false, //  ,    "" isSoundEnabled = true, //  ,     Leaderboard; //  Leaderboard   Clay.io 

рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЪрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

рд╕рднреА рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо Phaser.Game рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ GameStates рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Phaser.Game () рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
рдирдпрд╛ рдЧреЗрдо (рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ, рд░реЗрдВрдбрд░рд░, рдкреИрд░реЗрдВрдЯ, рд╕реНрдЯреЗрдЯ, рдЯреНрд░рд╛рдВрд╕рдкреЗрд░реЗрдВрдЯ, рдПрдВрдЯреАрд▓рд┐рдпрд╛)
рд╣рдо рдЪреМрдбрд╝рд╛рдИ , рдКрдВрдЪрд╛рдИ , рд░реЗрдВрдбрд░рд░ , рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдХреИрдирд╡рд╛рд╕ рдХреЗ рдЖрдпрд╛рдо, рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдФрд░ рдЦрд╛рд▓реА рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рддрд╛рдХрд┐ рдлреЗрдЬрд░ рд╢рд░реАрд░ рдореЗрдВ рдЦреЗрд▓ рдХреЗ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗред

рд╣рдо рдкрд╣рд▓реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣рдорд╛рд░реЗ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреЗрдЬрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 var Game = new Phaser.Game(WINDOW_WIDTH, WINDOW_HEIGHT, Phaser.CANVAS, SCENE); 

рд╣рдордиреЗ рдЧреЗрдо рд╕реАрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЧреЗрдо рд╕реНрдЯреЗрдЯрд╡ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдЧрд▓рддреА рдХреЛ рд╕реБрдзрд╛рд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
Game.state Phaser.StateManager рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рдЦреБрдж рдХреЗ State'ov рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рд╕рдорд╛рд░реЛрд╣ () рд╕рдорд╛рд░реЛрд╣ рд╣реИред рдЙрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:
рдЬреЛрдбрд╝реЗрдВ (рдХреБрдВрдЬреА, рд░рд╛рдЬреНрдп, рдСрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ)
рд░рд╛рдЬреНрдп (рдЗрд╕рдХреА рдЖрдИрдбреА) рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рд░рд╛рдЬреНрдп рдПрдХ Phaser.State рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдСрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ рдХреЛ рдЗрд╕рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд░рд╛рдЬреНрдп рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдСрдЯреЛрд╕реНрдЯрд╛рд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЦреЗрд▓ рдХреЗ рд╕рд╣реА рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд░рд╛рдЬреНрдп рдХреА рдХреЙрд▓ рдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред
рдЦреЗрд▓ рджреГрд╢реНрдп рдореЗрдВ рд╕рднреА рдЦреЗрд▓ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:

 Game.state.add('Boot', BootGameState, false); Game.state.add('Preloader', PreloaderGameState, false); Game.state.add('MainMenu', MainMenuState, false); Game.state.add('Game', GameState, false); Game.state.add('GameOver', GameOverState, false); 

рдЗрди рдЦреЗрд▓ рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдЧреЗрдордкреНрд▓реЗ рд▓реВрдк рд╢реБрд░реВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг BootGameState рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред

 Game.state.start('Boot'); 

рдореИрдВ рдкреВрд░рд╛ рдЦреЗрд▓ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рджреЗрддрд╛ рд╣реВрдВ:
рдЦреЗрд▓ рдЖрд░рдВрднреАрдХрд░рдг
 // instance       Canvas var Game = new Phaser.Game(WINDOW_WIDTH, WINDOW_HEIGHT, Phaser.CANVAS, SCENE); //  RequestAnimationFrame Game.raf = new Phaser.RequestAnimationFrame(Game); Game.antialias = false; Game.raf.start(); //   State   Game //     State'    Game.state.add('Boot', BootGameState, false); Game.state.add('Preloader', PreloaderGameState, false); Game.state.add('MainMenu', MainMenuState, false); Game.state.add('Game', GameState, false); Game.state.add('GameOver', GameOverState, false); //     Boot State' Game.state.start('Boot'); // Clay Leaderboard      Clay.ready(function() { Leaderboard = new Clay.Leaderboard({ id: 'your-leaderboard-id' }); }); 

рдЧреЗрдо рд╕реНрдЯреЗрдЯреНрд╕ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ?


Phaser рдореЗрдВ Phaser.State () рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдЦреЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд░рд╛рдЬреНрдп рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ:

 var BootGameState = new Phaser.State(); 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдлреЗрдЬрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп рдореЗрдВ, 4 рдореБрдЦреНрдп рд▓реВрдк рд╣реИрдВ: рдХреНрд░рд┐рдПрдЯ , рдкреНрд░реАрд▓реЛрдб , рд░реЗрдВрдбрд░ , рдЕрдкрдбреЗрдЯ ред

рдЕрдм рд╣рдорд╛рд░реЗ рд╢реБрд░реБрдЖрддреА рд╕реНрдЯреЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рдЧреЗрдо рд▓реВрдк рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред

рдмрд╛рдж рдХреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ, рдореИрдВ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЙрд╕ рдЪрд░ рдХреЗ рдирд╛рдо рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ Phaser.State () рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ

рдЙрд╕ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ (BootGameState)


рдЙрджрд╛рд╣рд░рдг Phaser.State рдмрдирд╛рдПрдБред рдЗрд╕рдХреЗ рд╕рдлрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ ..." рдХреЗ рд╕рд╛рде рдкрд╛рда рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд░рдЦреЗрдВред PreloaderState рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред

 var BootGameState = new Phaser.State(); BootGameState.create = function() { LoadingText = Game.add.text(Game.world.width / 2, Game.world.height / 2, LOADING_TEXT, { font: '32px "Press Start 2P"', fill: '#FFFFFF', stroke: '#000000', strokeThickness: 3, align: 'center' }); LoadingText.anchor.setTo(0.5, 0.5); Game.state.start('Preloader', false, false); }; 


рд╣рдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ "рдкреНрд░реАрд▓реЛрдбрд░" рд▓рд┐рдЦрддреЗ рд╣реИрдВ (PreloaderGameState)


рдкреНрд░реЗрдд, рдзреНрд╡рдирд┐, рдПрдиреАрдореЗрд╢рди, рдЖрджрд┐ рдХреЛ рдлреЗрдЬрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдлреЗрдЬрд░.рд▓рд╛рдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рдкреЙрдЗрдВрдЯрд░ Game.load рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдЬрдм рд╣рдордиреЗ рджреГрд╢реНрдп рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рддреАрди рддрд░реАрдХреЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВрдЧреЗ:

 Phaser.Loader.spritesheet(key, url, frameWidth, frameHeight, frameMax, margin, spacing) Phaser.Loader.image(key, url, overwrite) Phaser.Loader.audio(key, urls, autoDecode) 

рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдЧреЗрдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛:

 var loadAssets = function loadAssets() { Game.load.spritesheet('bird', 'img/bird.png', 48, 35); Game.load.spritesheet('clouds', 'img/clouds.png', 64, 34); Game.load.image('town', 'img/town.png'); Game.load.image('pipe', 'img/pipe.png'); Game.load.image('soundOn', 'img/soundOn.png'); Game.load.image('soundOff', 'img/soundOff.png'); Game.load.audio('flap', 'wav/flap.wav'); Game.load.audio('hurt', 'wav/hurt.wav'); Game.load.audio('score', 'wav/score.wav'); }; 

рдЕрдм PreloaderGameState рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдПрдХ рдирдпрд╛ Phaser.State () рдмрдирд╛рдПрдВред

 var PreloaderGameState = new Phaser.State(); 

рд╣рдо рдкреНрд░реАрд▓реЛрдб рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо loadAssets () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рддреЗ рд╣реИрдВ:

 PreloaderGameState.preload = function() { loadAssets(); }; 


рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рдлрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд▓реЛрдб рд╣реЛ рд░рд╣реЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдФрд░ рдореЗрдирдореЗрдиреБрд╕реНрдЯреЗрдЯ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдПрдиреАрдореЗрд╢рди рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
 PreloaderGameState.create = function() { var tween = Game.add.tween(LoadingText).to({ alpha: 0 }, 1000, Phaser.Easing.Linear.None, true); tween.onComplete.add(function() { Game.state.start('MainMenu', false, false); }, this); }; 

рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб PreloaderGameState ():
PreloaderGameState
 var PreloaderGameState = new Phaser.State(); PreloaderGameState.preload = function() { loadAssets(); }; PreloaderGameState.create = function() { var tween = Game.add.tween(LoadingText).to({ alpha: 0 }, 1000, Phaser.Easing.Linear.None, true); tween.onComplete.add(function() { Game.state.start('MainMenu', false, false); }, this); }; 

рдЕрдВрдд рдореЗрдВ


рдЗрд╕ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЦреЗрд▓ рджреГрд╢реНрдп, рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реАрд▓реЛрдбрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рдлрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдореЗрдирдореЗрдиреНрд╕рдЯреЗрдЯ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЧреЗрдо рдореЗрдиреВ рдХреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


Phaser
рдлреЗрдЬрд░ (рдЧрд┐рдЯрд╣рдм)
рдлреЗрд╕рд░ (рдкреНрд░рд▓реЗрдЦрди)
рдлреЗрдЬрд░ред рдирд╛рдо ()
рдлреЗрдЬрд░.рд▓рд╛рдУрдбрд░ ()
рдлрд╕рд░ .рд╕реНрдЯреЗрдЯ ()
рдлреЗрдЬрд╝рд░ .рд╕реНрдЯреЗрдЯрдореИрдиреЗрдЬрд░ ()
рдкрд┐рдХреНрд╕реА.рдЬреЗрдПрд╕ (рдЧрд┐рдЯрд╣рдм)

FlappyBird
FlappyBird (GitHub)
UPD: рд╣рд╛рд▓ рдХреЗ рдлрд┐рдХреНрд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдлреБрд▓-рд╕реНрдХреНрд░реАрди рдореЛрдб рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╢рд┐рдХрд╛рдпрддреЗрдВ рд╣реИрдВред

рдореИрдВ рд╣реИрдмрд░рд╣рд╛рдм рд╕рдореБрджрд╛рдп рдХреА рд░рд╛рдп рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдк рдЕрдЧрд▓реА рдХрдбрд╝реА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

Source: https://habr.com/ru/post/In214013/


All Articles