рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрдирд╡рд╕ рдЧреЗрдо рдмрдирд╛рдирд╛



рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ! рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдФрд░ рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЖрдХрд╕реНрдорд┐рдХ рдЧреЗрдо рдмрдирд╛рдПрдВред

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





рдкреАрдПрд╕ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣реИрдмрд░ рдиреЗ рд╕рд╛рда рд╣рдЬрд╛рд░рд╡рд╛рдБ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рдмрдбрд╝реЗ рд░рдВрдЧреАрди рд▓реЗрдЦреЛрдВ рдХреЛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдХрд╛рдЯ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрд╛рд╕реНрдЯрдмрд┐рди рдкрд░ рд▓реЗрдЦ рдХреЗ рдХреБрдЫ рдЦрдВрдбреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреА рдЦреЛрдЬ рдореЗрдВ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд▓реЗрдЦ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдЖрдк рджрд░реНрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред



рдирд┐рдпрдо



рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА (рдЦрд┐рд▓рд╛рдбрд╝реА) рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЪрд╛рд░рд╛ (рдмреИрдЯ) рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП - рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ "рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ" (рдмреИрд░рд┐рдпрд░) рдХреЛ рдЪрдХрдорд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦреЗрд▓ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЫреВрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЪрд╛рд░рд╛ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкрдХрдбрд╝рдирд╛ рд╣реИред

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



HTML рдлрд╝рд╛рдЗрд▓



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



[[ рдХреЛрдбред рдкрд┐рдЫрд▓реЗ рдкреГрд╖реНрда рдкрд░ /index.html ]]





рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд╡рдпрдВ рдмрдирд╛рдПрдВред рд╣рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ рддрдм рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рддреИрдпрд╛рд░ рд╣реЛ - рд╣рдо domready



рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ " domready



" рдХреА рдШрдЯрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ

рд╣рдо рдПрдХ LibCanvas.Canvas2D рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред



./js/start.js

window . addEvent ( 'domready' , function () {

//

var elem = $$( 'canvas' )[ 0 ];

// LibCanvas

var libcanvas = new LibCanvas . Canvas2D ( elem );

// ,

libcanvas . autoUpdate = true ;

// 60 fps

libcanvas . fps = 60 ;



//

libcanvas . start ();

});








рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ



рдПрдХ рдирдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ - рдкреНрд▓реЗрдпрд░, рдЬрд┐рд╕реЗ рдорд╛рдЙрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЗрд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдорд╛рдЙрд╕ рдХрд░реНрд╕рд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдВрдЧреЗред

рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рдВрдЧ рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдЪрдХреНрд░ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ (рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ)



[[ рдХреЛрдб ред/js/Player.js рдкрд╛рд╕реНрдЯрдмрд┐рди рдкрд░ ]]





libcanvas.start();



рд╕реЗ рдкрд╣рд▓реЗ libcanvas.start();



рдЬреЛрдбрд╝реЗрдВ libcanvas.start();



:

libcanvas . listenMouse ();



var
player = new Player (). setZIndex ( 30 );

libcanvas . addElement ( player );






= рдЪрд░рдг 1 =





рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╡реИрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдереА, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рдмрд╛рдж рдХреИрдирд╡рд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЖрдкрдХреЛ ./js/start.js рдкрд░ рдХреНрд▓реАрдВрдЬрд┐рдВрдЧ рдФрд░ рдмреНрд▓реИрдХ рдлрд┐рд▓ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛



libcanvas . addProcessor ( 'pre' ,

new
LibCanvas . Processors . Clearer ( '#000' )

);






= рдЪрд░рдг 2 =





рдЪрд╛рд░рд╛ рдЬреЛрдбрд╝реЗрдВ



[[ рдХреЛрдб ./js/Bait.js рдкрд╛рд╕реНрдЯрдмрд┐рди рдкрд░ ]]





./Js/start.js рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

// ,

var bait = new Bait (). setZIndex ( 20 );

libcanvas . addElement ( bait );








Refactoring - рдПрдХ рдореВрд▓ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рдорд╛рди рдмреИрдЯ рдФрд░ рдкреНрд▓реЗрдпрд░ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВред рдЪрд▓рд┐рдП рдПрдХ GameObject рдХреНрд▓рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╕реЗ рд╡реЗ рд╣рдореЗрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдВрдЧреЗред



рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд▓реЗрдпрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ createPosition рдмрдирд╛рддреЗ рд╣реИрдВ:

./js/Player.js

var Player = new Class({

// ...

initialize : function () {

// ..

this . shape = new LibCanvas . Shapes . Circle ({

center : this . createPosition ()

// ...

},



createPosition : function () {

return
this . libcanvas . mouse . point ;

},








рдЕрдм рдПрдХ GameObject рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ

[[ рдХреЛрдб ред/js/GameObject.js рдкрд╛рд╕реНрдЯрдмрд┐рди рдкрд░ ]]





рдЙрд╕рдХреЗ рдмрд╛рдж, рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╣рд▓реНрдХрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



./js/Bait.js

var Bait = new Class({

Extends :
GameObject ,



radius : 15 ,

color : '#f0f'

});








./js/Player.js

var Player = new Class({

Extends :
GameObject ,



radius : 15 ,

color : '#080' ,



createPosition : function () {

return
this . libcanvas . mouse . point ;

},



draw : function () {

if (
this . libcanvas . mouse . inCanvas ) {

this . parent ();

}

}

});








рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЯреВрдЯрд╛:

= рдЪрд░рдг 3 =





рд╣реБрд░реНрд░реЗ! рд╕рдм рдХреБрдЫ рд╣рд░ рдЬрдЧрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред



рдПрдХ рдЪрд╛рд░рд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рджреЛрд╕реНрдд



рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рдм рдХреБрдЫ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП, рдЪрд╛рд░рд╛ рдФрд░ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рджреЛрд╕реНрдд рдмрдирд╛рдиреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдЬрдм рд╡реЗ рдЗрд╕рдореЗрдВ рджреМрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдЪрд╛рд░рд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдерд╛рди рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрдирд╛рдПрдВ, рдЬреЛ рд╕рдВрдкрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред



рд╣рдо рдЕрдВрдд рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ ред/js/start.js :

(function(){

bait . isCatched ( player );

}.
periodical ( 30 ));








рдЕрдм рд╣рдореЗрдВ ./js/Bait.js рдореЗрдВ isCatched рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

isCatched : function ( player ) {

if (
player . shape . intersect ( this . shape )) {

this . move ();

return
true ;

}

return
false ;

},



move : function () {

//

this . shape . center = this . createPosition ();

}






= рдЪрд░рдг 4 =





рд▓рдЧрднрдЧ рдЙрддреНрдХреГрд╖реНрдЯ, рд▓реЗрдХрд┐рди рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдВрджреЛрд▓рди рдЕрд╢рд┐рд╖реНрдЯ рдФрд░ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЪрд╛рд░рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рднрд╛рдЧ рдЬрд╛рдПред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк LibCanvas рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЪрд╛рд▓ рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:



рдЕрдм рд╣рдореЗрдВ ./js/Bait.js рдореЗрдВ isCatched рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

var Bait = new Class({

Extends :
GameObject ,

Implements : [
LibCanvas . Behaviors . Moveable ],



// ...



move : function () {

// (800),

this . moveTo ( this . createPosition (), 800 );

}

});








рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдореБрдЭреЗ рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИ:

= рдЪрд░рдг рел =





рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ





./js/Barrier.js :

var Barrier = new Class({

Extends :
GameObject ,



full : null ,

speed : null ,

radius : 8 ,

color : '#0ff' ,



initialize : function () {

this . parent ();

this . speed = new LibCanvas . Point (

$random ( 2 , 5 ), $random ( 2 , 5 )

);

// ,

$random ( 0 , 1 ) && ( this . speed . x *= - 1 );

// ,

$random ( 0 , 1 ) && ( this . speed . y *= - 1 );

},

move : function () {

this . shape . center . move ( this . speed );

return
this ;

},

intersect : function ( player ) {

return (
player . shape . intersect ( this . shape ));

}

});








рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдЗрдП рдмрджрд▓ рджреЗрдВ ред/js/start.js рдереЛрдбрд╝рд╛ рддрд╛рдХрд┐ рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдордЫрд▓реА рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░рд╛ рджрд┐рдЦрд╛рдИ рджреЗ:

bait . isCatched ( player );

//

if ( bait . isCatched ( player )) {

player . createBarrier ();

}

player . checkBarriers ();








рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ ред/js/Player.js рдФрд░ рдЙрди рд╕рднреА рдХреЛ рд╣рд░ рдЪреЗрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

barriers : [],



createBarrier : function () {

var
barrier = new Barrier (). setZIndex ( 10 );

this . barriers . push ( barrier );

// libcanvas,

this . libcanvas . addElement ( barrier );

return
barrier ;

},



checkBarriers : function () {

for (var
i = this . barriers . length ; i --;) {

if (
this . barriers [ i ]. move (). intersect ( this )) {

this .die();

return
true ;

}

}

return
false ;

},



die : function () { },;






= рдЪрд░рдг рем =





рдЦреИрд░, рдЦреЗрд▓ рдореЗрдВ рдЖрдВрджреЛрд▓рди рдерд╛ред рд▓реЗрдХрд┐рди рд╣рдо рддреАрди рд╕рдорд╕реНрдпрд╛рдПрдВ рджреЗрдЦрддреЗ рд╣реИрдВ:

1. рд╢рд┐рдХрд╛рд░реА рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рд▓рд┐рдП рдЙрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ "рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рд▓рдбрд╝рдиреЗ" рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред

2. рдХрднреА-рдХрднреА рдЪрд╛рд░рд╛ рдХреЛ рджреЛ рдмрд╛рд░ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рд╡рд╣ рдЙрдбрд╝ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдереЛрдбрд╝реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП "рдЕрдпреЛрдЧреНрдпрддрд╛" рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

3. рдореМрдд рдХрд╛ рдорд╛рдорд▓рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рд╢рд┐рдХрд╛рд░реА рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рд▓рдбрд╝рддреЗ рд╣реИрдВ, рдЪрд╛рд░рд╛ рдХреЛ "рдЕрдпреЛрдЧреНрдпрддрд╛" рдХрд╛ рдХрдо рд╕рдордп рдорд┐рд▓рддрд╛ рд╣реИ



рджреАрд╡рд╛рд░ рд╣рдорд▓реЛрдВ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдЖрд╕рд╛рди рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреИрд░рд┐рдпрд░ рдХреНрд▓рд╛рд╕ рдХреА рдЪрд╛рд▓ рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВ ред/js/Barrier.js :

[[ рдкреЗрд╕реНрдЯрдмрд┐рди рдкрд░ рдмреИрд░рд┐рдпрд░ред рд▓реЛрд╡реЗ рдХреЛрдб ]]





рдЪрд╛рд░рд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рднреА рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рд╣рдо ./js/Bait.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмреИрдЯ рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред

[[ рдкрд╛рд╕реНрдЯрдмрд┐рди рдкрд░ Bait.makeInvulnerable рдХреЛрдб ]]





= рдЪрд░рдг 7 =





рд╣рдореЗрдВ рдореМрдд рдФрд░ рд╕реНрдХреЛрд░рд┐рдВрдЧ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ



рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдХ - рдпрд╣ рдХрд┐рддрдиреА рдмрд╛рд░ рдЪрд╛рд░рд╛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдХреНрд░реАрди рдкрд░ рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ - рдЕрдВрдХ рдЧрд┐рдирдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:

рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд░реНрдЧ рдореЗрдВ рдбреНрд░рд╛ рд╡рд┐рдзрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛рдПрдБ, рдлрд╝рд╛рдЗрд▓ ./js/Player.js :

draw : function () {

// ...

this . libcanvas . ctx . text ({

text : 'Score : ' + this . barriers . length ,

to : [ 20 , 10 , 200 , 40 ],

color : this . color

});

},



// .. - - -

die : function () {

for (var
i = this . barriers . length ; i --;) {

this . libcanvas . rmElement ( this . barriers [ i ]);

}

this . barriers = [];

}








рдПрдХрд▓ рдЦрд┐рд▓рд╛рдбрд╝реА рдЦреЗрд▓ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ!

= рдЪрд░рдг 8 - рдПрдХрд▓ рдЦрд┐рд▓рд╛рдбрд╝реА =





рд╣рдореЗрдВ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ



рдХреАрдмреЛрд░реНрдб рдЖрдВрджреЛрд▓рди



рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд╣рдо рдорд╛рдЙрд╕ рд╕реЗ рдХреАрдмреЛрд░реНрдб рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред In/ js/start.js рд╣рдо libcanvas.listenMouse()



рдХреЛ libcanvas.listenKeyboard()





рдЗрд╕рдореЗрдВ, рд╣рдо рдордзреНрдпрд╛рдВрддрд░ рдореЗрдВ player.checkMovement();



рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ player.checkMovement();



ред

In/ js/Player.js рд╣рдо рдУрд╡рд░рд░рд╛рдЗрдб createPosition



, draw



рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рдо рдорд╛рдЙрд╕ рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:



speed : 8 ,

checkMovement : function () {

var
pos = this . shape . center ;

if (
this . libcanvas . getKey ( 'left' )) pos . x -= this . speed ;

if (
this . libcanvas . getKey ( 'right' )) pos . x += this . speed ;

if (
this . libcanvas . getKey ( 'up' )) pos . y -= this . speed ;

if (
this . libcanvas . getKey ( 'down' )) pos . y += this . speed ;

},






= рдЪрд░рдг 9 =





рдПрдХ рдЕрдкреНрд░рд┐рдп рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ - рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реНрдХреНрд░реАрди рдХреЗ рдкреАрдЫреЗ рдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдпрд╣ рдЦреЛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЗрдП рдЗрд╕рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдХреБрдВрдЬреА рд░рд╛рдЬреНрдп рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ

isMoveTo : function ( dir ) {

return
this . libcanvas . getKey ( dir );

},

checkMovement : function () {

var
pos = this . shape . center ;

var
full = this . getFull ();

if (
this . isMoveTo ( 'left' ) && pos . x > 0 ) pos . x -= this . speed ;

if (
this . isMoveTo ( 'right' ) && pos . x < full . width ) pos . x += this . speed ;

if (
this . isMoveTo ( 'up' ) && pos . y > 0 ) pos . y -= this . speed ;

if (
this . isMoveTo ( 'down' ) && pos . y < full . height ) pos . y += this . speed ;

},








рд╣рдо isMoveTo рдкрджреНрдзрддрд┐ рдХреЛ рднреА рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ - рддрд╛рдХрд┐ рдЖрдк рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд╛рдмрд┐рдпрд╛рдБ рдмрджрд▓ рд╕рдХреЗрдВ:



control : {

up : 'up' ,

down : 'down' ,

left : 'left' ,

right : 'right'

},

isMoveTo : function ( dir ) {

return
this . libcanvas . getKey ( this . control [ dir ]);

},






= рдЪрд░рдг резреж =





рджреВрд╕рд░рд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рджрд░реНрдЬ рдХрд░реЗрдВ



рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ ред/js/start.js :



var player = new Player (). setZIndex ( 30 );

libcanvas . addElement ( player );



// =>



var players = [];

(
2 ). times (function ( i ) {

var
player = new Player (). setZIndex ( 30 + i );

libcanvas . addElement ( player );

players . push ( player );

});



//

players [ 1 ]. color = '#ff0' ;

players [ 1 ]. control = {

up : 'w' ,

down : 's' ,

left : 'a' ,

right : 'd'

};








рдЯрд╛рдЗрдорд░ рдХреА рд╕рд╛рдордЧреНрд░реА players . each (function ( player ) { /* * */ });



рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП players . each (function ( player ) { /* * */ });



players . each (function ( player ) { /* * */ });





= рдЪрд░рдг 11 =





рдпрд╣ рдЫреЛрдЯреЗ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:

1. рдкрд╣рд▓реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджреВрд╕рд░реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рд╕реНрдХреЛрд░ рдХрдо рдХрд░реЗрдВред

2. рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЗ рд╢рд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд░рдВрдЧ рджреЗрдВред

3. рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рдЦрд╛рддрд┐рд░, "рд░рд┐рдХреЙрд░реНрдб" рджрд░реНрдЬ рдХрд░реЗрдВ - рдХрд┐рд╕ рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХрддрдо рд╕реНрдХреЛрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред



./Js/Player.js : рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ

var Player = new Class({



// ...



// :

createBarrier : function () {

// ...

barrier . color = this . barrierColor || this . color ;

// ...

},



//

maxScore : 0 ,

die : function () {

this . maxScore = Math . max ( this . maxScore , this . barriers . length );

// ...

},



index : 0 ,

draw : function () {

this . parent ();

this . libcanvas . ctx . text ({

// :

text : 'Score : ' + this . barriers . length + ' (' + this . maxScore + ')' ,

// 20 :

to : [ 20 , 10 + 20 * this . index , 200 , 40 ],

color : this . color

});

}

});








рд╣рдо ./js/start.js рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ :



( 2 ). times (function ( i ) {

var
player = new Player (). setZIndex ( 30 + i );

player . index = i ;

// ...

});



players [ 0 ]. color = '#09f' ;

players [ 0 ]. barrierColor = '#069' ;



//

players [ 1 ]. color = '#ff0' ;

players [ 1 ]. barrierColor = '#960' ;

players [ 1 ]. control = {

up : 'w' ,

down : 's' ,

left : 'a' ,

right : 'd'

};








рдмрдзрд╛рдИ рд╣реЛ, рдЦреЗрд▓ рд╣реЛ рдЧрдпрд╛!

= рдЪрд░рдг 12 - рджреЛ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓рддреЗ рд╣реИрдВ =





рдПрдХ рддреАрд╕рд░рд╛ рдФрд░ рдЪреМрдерд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рдЬреЛрдбрд╝реЗрдВ



рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рддреАрд╕рд░реЗ рдФрд░ рдЪреМрдереЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:



players [ 2 ]. color = '#f30' ;

players [ 2 ]. barrierColor = '#900' ;

players [ 2 ]. control = {

up : 'i' ,

down : 'k' ,

left : 'j' ,

right : 'l'

};



// players[0] uses numpad

// players[3] uses home end delete & pagedown

players [ 3 ]. color = '#3f0' ;

players [ 3 ]. barrierColor = '#090' ;

players [ 3 ]. control = {

up : '$' ,

down : '#' ,

left : 'delete' ,

right : '"'

};






= рдЪрд░рдг 13 - рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦреЗрд▓рддреЗ рд╣реИрдВ




All Articles