рд▓рд╢рд░реАрдХ рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдЫрд╡рд┐ рдпрд╣ рдЧреБрд░реБрд╡рд╛рд░ рдХреА рд╢рд╛рдо рдереА рдЬрдм рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдиреЗ HTML5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдУрдкрдирд╕реЛрд░реНрд╕ рдЧреЗрдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рдЬреЛ рдЖрдЬрдХрд▓ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЦрд░реЛрдВрдЪ рд╕реЗ рдФрд░ рд╕рд┐рд░реНрдл рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдПред

рдЪреВрдВрдХрд┐ рд╣рдо рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЕрдиреБрднрд╡ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдХрдо рдерд╛, рдпрд╣ рдкрд╣рд▓реЗ рдиреЛрдХрд┐рдпрд╛ рдлреЛрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдЧреЗрдо - рд░реИрдкрд┐рдбреНрд░реЙрд▓ рдХрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рдХреНрд▓реЛрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рд╣рдлреНрддреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкрд╣рд▓реА рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬрд╝ рдЬрд╛рд░реА рдХреА , рдФрд░ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред



рдЪрд░рдг 1. рдбрд┐рдЬрд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝


рдХреЛрдИ рднреА рдЧреЗрдо рдЬреЛ рджреБрдирд┐рдпрд╛ рдХреЛ рдЬреАрдд рд▓реЗрдЧрд╛, рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЗрдЯрдо рд╣реЛрддреЗ рд╣реИрдВ:

рдЦреЗрд▓ рдХрд╛ рдЕрд░реНрде рд╣реИ, рд▓рд╢рд╛рд░реАрдХ рдХреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рджреГрд╢реНрдп рднрд╛рдЧ рдореЗрдВ рд░рдЦрдирд╛, рдЗрд╕реЗ рдмрдврд╝рддреЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ, рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рдХреЛ рдЧрд┐рд░рдиреЗ рдпрд╛ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ред

рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ

рдЪрд░рдг 2. рд╡рд╛рд╕реНрддреБрдХрд▓рд╛


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрд░реЗрдЦ MVC рдореЙрдбрд▓ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рдХрдХреНрд╖рд╛рдПрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрдВрдХрд╛рд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

function GameModel() { this.setView = function(v) { view = v; }; this.getView = function() { return view; }; this.moveLeft = function() { ... }; this.moveRight = function() { ... }; this.next = function() { // build next/new frame ... view.update(); //update view }; } function HTML5View(canvas) { var model; this.setModel = function(m) { model = m; }; this.getModel = function() { return model; }; var context = canvas.getContext("2d"); this.update = function() { // clear view ... // drawing model to canvas ... }; } function KeyboardController() { var model = null; this.setModel = function(m) { model = m; }; this.getModel = function() { return model; }; this.keydown = function(event) { if (event.keyCode == LEFT_KEY_CODE) { model.moveLeft(); } else if (event.keyCode == RIGHT_KEY_CODE) { model.moveRight(); } }; document.onkeydown = this.keydown; } function Game(model, view, ctrl) { view.setModel(model); ctrl.setModel(model); model.setView(view); this.run = function() { setInterval(model.next, 1000 / DEFAULT_FPS); }; } function main(canvas) { var view = new HTML5View(canvas); var model = new GameModel(); var ctrl = new KeyboardController(); var game = new Game(model, view, ctrl); game.run(); } 


рдЪрд░рдг 3. рдкрд╣рд▓рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк


рдПрдХ рджрд┐рди рдмрд╛рдж, HTML5 рдХреЛрдб рдХреА 150 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЫрд╡рд┐

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЪрд▓рддреА рд▓реЙрд╕рд╣рд░реНрдХ рдФрд░ рджреБрдирд┐рдпрд╛ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХреЛрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЦреЗрд▓рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╣рд┐рдЯ рдХреЗ рд▓рд┐рдП рднреМрддрд┐рдХреА рдФрд░ рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред

рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдореБрдЦреНрдп "рдЪрд┐рдк" рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬреЗрдирд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдерд╛ - рд╢реАрд░реНрд╖ рдПрдХ рдХреЗ рд╡рд┐рдирд╛рд╢ рдХреЗ рдмрд╛рдж рдирдП рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛрдб рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 var generatePlatforms = function() { do { var type = (Math.random() 0.6) ? PLATFORM_TYPE.SOLID : PLATFORM_TYPE.KILLER; var baseline = pCounter > 0 ? platforms[pCounter - 1].y : 0; platforms[pCounter++] = { x: Math.floor(Math.random() * (WIDTH - DEFAULT_PLATFORM_WIDTH)), y: Math.floor(baseline + (Math.random() * (DEFAULT_MAX_PLATFORM_INTERVAL - DEFAULT_MIN_PLATFORM_INTERVAL + 1)) + DEFAULT_MIN_PLATFORM_INTERVAL), w: DEFAULT_PLATFORM_WIDTH, h: DEFAULT_PLATFORM_HEIGHT, type: type }; } while (platforms[pCounter - 1].y < (HEIGHT + DEFAULT_PLATFORM_HEIGHT)); }; 


рдЪрд░рдг 4. рджреВрд╕рд░рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк


рджреВрд╕рд░реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╣рд┐рдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЦрдВрдбреЛрдВ рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкрд┐рдЫрд▓реЗ рд▓реЙрд╕рд╣рд┐рд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдХрдерд┐рдд рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдирдП, рд╡рд░реНрддрдорд╛рди рд▓реЙрд╕рд╣рд┐рд░реНрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ P1 рдФрд░ P2 рдХреЗ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдЬрдм рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд▓реЙрд╕рд╣рд░реНрдХ рдХреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЫрд╡рд┐

рдмрд╛рдж рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЬреЛ рдЪреМрд░рд╛рд╣реЗ рдореЗрдВ рдЧрд┐рд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдРрд╕рд╛ рдХреЛрдб рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛:

 var isRollCrossPlatform = function(platform, rollPrev, rollNext) { // we should to check only platforms between prev roll and next roll if (platform.y <= rollPrev.y || platform.y > rollNext.y + rollNext.h) return false; var s1 = { x1: platform.x, y1: platform.y, x2: platform.x + platform.w, y2: platform.y }; var s2 = { x1: rollPrev.x, y1: rollPrev.y + rollPrev.h - worldSpeed, x2: rollNext.x, y2: rollNext.y + rollNext.h }; var s3 = { x1: rollPrev.x + rollPrev.w, y1: rollPrev.y + rollPrev.h - worldSpeed, x2: rollNext.x + rollNext.w, y2: rollNext.y + rollNext.h }; var zn1 = (s2.y2 - s2.y1) * (s1.x2 - s1.x1) - (s2.x2 - s2.x1) * (s1.y2 - s1.y1); var zn2 = (s3.y2 - s3.y1) * (s1.x2 - s1.x1) - (s3.x2 - s3.x1) * (s1.y2 - s1.y1); if (Math.abs(zn1) < Math.EPS && Math.abs(zn2) < Math.EPS) return false; var ch11 = (s2.x2 - s2.x1) * (s1.y1 - s2.y1) - (s2.y2 - s2.y1) * (s1.x1 - s2.x1); var ch21 = (s1.x2 - s1.x1) * (s1.y1 - s2.y1) - (s1.y2 - s1.y1) * (s1.x1 - s2.x1); if ((ch11/zn1 <= 1.0 && ch11/zn1 >= 0.0) && (ch21/zn1 <= 1.0 && ch21/zn1 >= 0.0)) { return true; } var ch12 = (s3.x2 - s3.x1) * (s1.y1 - s3.y1) - (s3.y2 - s3.y1) * (s1.x1 - s3.x1); var ch22 = (s1.x2 - s1.x1) * (s1.y1 - s3.y1) - (s1.y2 - s1.y1) * (s1.x1 - s3.x1); if ((ch12/zn2 <= 1.0 && ch12/zn2 >= 0.0) && (ch22/zn2 <= 1.0 && ch22/zn2 >= 0.0)) { return true; } return false; }; 


рджреВрд╕рд░реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЬреЛрдбрд╝реЗ рдЧрдП: рд╣рд┐рд▓рдирд╛, рдорд╛рд░рдирд╛ рдФрд░ рдкрд┐рдШрд▓рдирд╛ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреА рд╕рд╛рдЗрдб рд╕реАрдорд╛рдУрдВ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдЪрд░рдг 4. рддреАрд╕рд░рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк


рдореБрдХреНрдд рдЧрд┐рд░рд╛рд╡рдЯ рдореЗрдВ рдпрд╛рддреНрд░рд╛ рдХреА рдЧрдИ рджреВрд░реА рдХреЗ рдЧреБрдгрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА рдПрдХ рдЬреАрд╡рди рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдЗрд╕ рдЬреАрд╡рди рдХреЛ рдЦреЛрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреАред

рдЫрд╡рд┐

рдЪрд░рдг 5. рд░рд┐рд▓реАрдЬ!


рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рд╣реЛрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдерд╛, рдЬреЛ рдХрд┐ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рддрдХ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдирд╛ рдерд╛ - рдПрдЪрдЯреАрдПрдордПрд▓ 5 рд╡реНрдпреВ рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВ:

рдХреИрдирд╡рд╛рд╕ рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдбреНрд░рд╛рдЗрдВрдЧ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕, рдбреНрд░рд╛рдЗрдВрдЧ рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ (рдЫрд╡рд┐рдпреЛрдВ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 context.fillRect(x, y, width, height) -> context.drawImage(roll, x, y, width, height) 


рдпрд╣ рдЕрдВрддрд┐рдо 10 рдлреНрд░реЗрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдлрдкреАрдПрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдФрд░ рдХреБрд▓ рд╕рдордп рдХреЗ рдбреНрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдЕрдВрддрддрдГ, рдХрд╛рдЙрдВрдЯрд░ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 // draw current fps var fps = (frameCounter / totalTime) * 1000.0; context.fillText(fps.toFixed(2) + " fps", 4, HEIGHT - 6); // calc FPS if (frameCounter > FPS_REFRESH_INTERVAL) { frameCounter = 0; totalTime = 0; } frameCounter++; var currentTime = new Date().getTime(); totalTime += (currentTime - lastTime); lastTime = currentTime; 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд┐рд▓реАрдЬ рдиреЗ рдЦреЗрд▓ рдХреЗ рднреМрддрд┐рдХреА рдХреЗ рдЧреБрдгрд╛рдВрдХ - рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг, рдПрдХреНрд╕ рддреНрд╡рд░рдг рдкрд░ рдЕрдзрд┐рдХ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд▓рдВрдмреЗ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдХрдард┐рдирд╛рдИ рдХреЗ рд╕реНрддрд░реЛрдВ (рд╕реНрддрд░реЛрдВ) рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред

рдЫрд╡рд┐

рдЖрдВрдХрдбрд╝реЗ


рдПрдХ рд╕рдкреНрддрд╛рд╣ рдореЗрдВ, рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓рдЦрд╛рд░реА рдХреЛ 1130 рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЗрдВ рдорд┐рд▓реАрдВ:

рд▓реЙрд╕рд╣рд░реНрдХ 2.0 рдХреЗ рд▓рд┐рдП рдпреЛрдЬрдирд╛рдПрдВ



рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рд╣рдо рдПрдХ рдЫреЛрдЯреА рд╕реА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреБрдирд┐рдпрд╛ рдХреЛ рдЬреАрддрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреАрдо рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╛рдЗрдирд░ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк OpenSource рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдФрд░ рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдЙрдиреНрдирдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рдХрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝реЗрдВ рдпрд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред

рдкреБрдирд╢реНрдЪ рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ !
Googlecode рдкрд░ рдкреАрдкреАрдПрд╕ рд▓рдЦрд╛рд░реАрдХ ред

рдЕрджреНрдпрддрди: рдПрдХ рдкреИрдЪ рдХреЗ рд▓рд┐рдП qmax рд╣рдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдХрд┐ Losharik рдХреЛ рд░реЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рддрд╛ рд╣реИ!

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


All Articles