LibCanvas рдкрд░ Isometric рд╕реИрдкрд░ (html5)


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

рдкреНрд▓реЗ рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ "рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░"






рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд▓рд┐рдмрд╛рд╕рдирд╡рд╛рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ рд╕реИрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛:



рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░


рдлрд┐рд░ рднреА, рдореИрдВ рдирд┐рд░рд░реНрдердХ рдЖрд▓реЛрдЪрдирд╛ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ, "рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реИрдкрд░ рдмреЗрд╣рддрд░ рд╣реИ", "рдЗрд╕ рд░реВрдк рдХреЗ рджреНрд╡рд╛рд░ рдмрдХрд╡рд╛рд╕ рд╣реИрдВ" рдФрд░ "рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╣рд╛рдВ рдереЛрдбрд╝рд╛ рдЕрдирд┐рдпрдорд┐рдд рд╕реВрддреНрд░ рдХреА рдЫрд╛рдпрд╛ рд╣реИред" рд▓рдХреНрд╖реНрдп рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЦрд┐рд▓реМрдирд╛ рдмрдирд╛рдирд╛ рдерд╛ (рдХрд▓рд╛ рднрд╛рдЧ рдХреЗ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 8 рдШрдВрдЯреЗ рдФрд░ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдЗрддреНрдореАрдирд╛рди рд╕реЗ рдЧрддрд┐ рд╕реЗ рдХреЛрдб рдХреЗ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 4 рдШрдВрдЯреЗ)ред рдФрд░ рдЗрд╕ рдЦрд┐рд▓реМрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рдХрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ рджреГрд╢реНрдп


рдЪрд▓реЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред LibCanvas рдкрд░ Isometric рдЦреЗрд▓ рджреЛ рдЯреВрд▓ - LibCanvas.App рдврд╛рдВрдЪреЗ рдХреЛ LibCanvas.App рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд┐рдЫрд▓реЗ рджреЛ рд╡рд┐рд╖рдпреЛрдВ рдФрд░ IsometricEngine.Projection рд╡рд░реНрдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдерд╛ред

IsometricEngine.Projection рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рдХреБрдЫ рднреА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ 2d рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ 3 рдбреА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

 var projection = new IsometricEngine.Projection({ factor: new Point3D(1, 0.5, 1) }); //   3d  2d var point2d = projection.toIsometric(new Point3D(100, 50, 10)); //   2d  3d var point3d = projection.to3d( mouse.point, 0 ); 

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

рд╡реИрд╕реЗ, рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ factor ? рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рд╣реА рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ рдкреНрд░рдХреНрд╖реЗрдкрдг 120 ┬░ рдХреЗ рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЦрд┐рд▓реМрдиреЗ ~ 117 рдбрд┐рдЧреНрд░реА рдХреЗ рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд▓рд╛рдЗрдиреЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдЧреНрд░рд┐рдб рдореЗрдВ рдЖ рдЬрд╛рдПрдВред



рдпрд╣ рд╕рд┐рд░реНрдл рдХрд╛рд░рдХ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдк рдХрд┐рд╕реА рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ:
 //   factor: new Point3D( 1, 0.5, 1) //   factor: new Point3D(0.866, 0.5, 0.866) 


рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдореИрдВрдиреЗ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓рд╛рдирдд рдирд╣реАрдВ рджреА рдФрд░ рдмрд╕ рдХрд╛рд░рдХ рдХреЛ рдЪрд┐рддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд░рд╛рдмрд░ рдмрдирд╛ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдЪрд┐рддреНрд░ рдХрд╛ рдмрд╛рдпрд╛рдБ рдХреЛрдирд╛ рд╣реИ [0;0;0] , рдФрд░ рджрд╛рд╣рд┐рдиреЗ рдХреЛрдиреЗ рдореЗрдВ [1;1;0]
 factor: new Point3D(90, 52, 54) 




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

 /** @class IsoMines.Cell */ atom.declare( 'IsoMines.Cell', App.Element, { renderTo: function (ctx, resources) { ctx.drawImage({ image : resources.get('images').get('static-carcass'), center: this.shape.center }); } }); 


рдФрд░ рдлрд┐рд░, рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрднреБрдЬ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛:

 createPolygon: function (point) { var p = this.projection; return new Polygon( p.toIsometric(new Point3D(point.x , point.y , 0)), p.toIsometric(new Point3D(point.x+1, point.y , 0)), p.toIsometric(new Point3D(point.x+1, point.y+1, 0)), p.toIsometric(new Point3D(point.x , point.y+1, 0)) ); }, createCells: function () { var size = this.fieldSize, x, y, point; for (x = size.width; x--;) for (y = size.height; y--;) { point = new Point(x, y); new IsoMines.Cell(this.layer, { point : point, shape : this.createPoly(point) }); } 


рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ - рдпрд╣ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, IMHOред

рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдкреАрдб рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди

рдЕрдм рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рдЗрд╕рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рд╕рдВрдкреВрд░реНрдг рдЖрдХрд░реНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБрдПрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд╣реАрдВ рдЪрд▓рддреА рд╣реИрдВ рдФрд░ рдХрднреА рднреА рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рд╡реЗ рдХреЗрд╡рд▓ рд╕реНрдкрд░реНрд╢ рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдмрд╣реБрдд рдмреЗрд░рд╣рдореА рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдХреБрдЫ рднреА рдорд┐рдЯрд╛рдПрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдмрд╕ рдкреБрд░рд╛рдиреЗ рдХреЗ рдКрдкрд░ рдПрдХ рдирдИ рд╕реЗрд▓ рдЫрд╡рд┐ рдмрдирд╛рдПрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдкрд░рдд рдмрдирд╛рддреЗ рд╕рдордп LibCanvas.App рдореЗрдВ рдЪреМрд░рд╛рд╣реЗ рдХреА рдЬрд╛рдВрдЪ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛

 this.layer = this.app.createLayer({ intersection: 'manual' }); 


рджреВрд╕рд░реЗ, рд╕рдлрд╛рдИ рд╡рд┐рдзрд┐ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдХреЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ:

 /** @class IsoMines.Cell */ atom.declare( 'IsoMines.Cell', App.Element, { clearPrevious: function () {} }); 


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлрд╛рдИ рд╕реЗ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ... рд╣рдорд╛рд░реА рдЫрд╡рд┐ рдореЗрдВ рдкрд╛рд░рднрд╛рд╕реА рдХреНрд╖реЗрддреНрд░ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ kazmiruk рдХреА рддрд░рд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗ :



рдпрд╣ LibCanvas.App рдХреЗ рджреЛ " LibCanvas.App " рд╕реЗ LibCanvas.App - рдмрд╛рдЙрдВрдбрд┐рдВрдЧрд╢реАрдЯрдВрдЧрд▓ рдХреЛ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдлрд┐рдЧрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕реЗ рдареАрдХ рд╕реЗ рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ, рджреЛрдиреЛрдВ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ):

 /** @class IsoMines.Cell */ atom.declare( 'IsoMines.Cell', App.Element, { //     ,    boundingRectangle get currentBoundingShape () { return this.shape; } //    , .      clearPrevious: function (ctx) { ctx.clear( this.shape ); } }); 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рд╕реНрдерд┐рд░ рдпрд╛ рдЕрд░реНрдз-рд╕реНрдерд┐рд░ рдкрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рддреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдгрдиреАрддрд┐ рд╣реИ:

 this.layerStatic = this.app.createLayer({ intersection: 'manual' }); this.layerDynamic = this.app.createLayer({ intersection: 'auto' }); 


рд╕реНрдкреНрд░рд┐рдЯ рдПрдирд┐рдореЗрд╢рди



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

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

рдПрдХ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдирд╛ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ:

1. рдХрдЯрд╛ рд╣реБрдЖ рдлреНрд░реЗрдо

рдПрдирд┐рдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рд╣рдордиреЗ рдХрдИ рдЫреЛрдЯреЗ рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЧреНрд░рд┐рдб рдЪрд┐рддреНрд░ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛:

 var frames = new Animation.Frames( image, 180, 104 ); 


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

2. рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдПрдиреАрдореЗрд╢рди

рдПрдиреАрдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд╢реАрдЯ рдореЗрдВ рд╣рдо рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ - рдлрд╝реНрд░реЗрдо рдСрд░реНрдбрд░, рд╡рд┐рд▓рдВрдм, рд▓реВрдк рдФрд░ рдКрдкрд░ рдХрд╛рдЯреЗ рдЧрдП рдлрд╝реНрд░реЗрдо рдХрд╛ рд▓рд┐рдВрдХ рджреЗрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдПрдиреАрдореЗрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╕реНрдлреЛрдЯ рдПрдиреАрдореЗрд╢рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХрдИ рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ - рддреЛ рдЗрд╕рдХрд╛ Animation.Sheet ред рдкрддреНрд░рдХ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ рд╕реИрдкрд░ рдореЗрдВ рдореБрдЭреЗ рддреАрди рдПрдирд┐рдореЗрд╢рди рдХреА рдЬрд░реВрд░рдд рдереА - рд▓реЙрдХ рдЦреЛрд▓рдирд╛ рдФрд░ рдмрдВрдж рдХрд░рдирд╛, рджрд░рд╡рд╛рдЬреЗ рдЦреЛрд▓рдирд╛ рдФрд░ рдмрдВрдж рдХрд░рдирд╛ред рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕реЗрдЯрд┐рдВрдЧ рдереА, рдлреНрд░реЗрдо, рдХреЗрд╡рд▓ рдлреНрд░реЗрдо рдХрд╛ рдирд╛рдо рдФрд░ рдХреНрд░рдо рдЕрд▓рдЧ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рд╕рдм рдХрдо рдФрд░ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд┐рдпрд╛ рдерд╛:

 this.animationSheets = atom.object.map({ opening : atom.array.range( 12, 23), closing : atom.array.range( 23, 12), locking : atom.array.range( 0, 11), unlocking: atom.array.range( 11, 0) }, function (sequence) { return new Animation.Sheet({ frames: frames, delay : 40, sequence: sequence }); }); console.log( this.animationSheets ); 




3. рдПрдиреАрдореЗрд╢рди рдХрд╛ рд╕рд╛рд░


рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдПрдХ рд╕реАрдзреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреАрдореЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдХреЙрд▓рдмреИрдХ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдкрд░ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реИрдкрд░ рдореЗрдВ, рдореИрдВрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдХреЗ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рд╢реБрднрд╛рд░рдВрдн рдХрд┐рдпрд╛:

IsoMines.Cell рдореЗрдВ рдПрдирд┐рдореЗрдЯреЗрдб рд╕реНрдЯреЗрдЯ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ
 /** @class IsoMines.Cell */ atom.declare( 'IsoMines.Cell', App.Element, { preStates: { opened: 'opening', closed: 'unlocking', locked: 'locking' }, changeState: function (state, callback) { this.state = this.preStates[state]; this.animation = new Animation({ sheet : this.sheets[this.state], onUpdate: this.redraw, onStop : function () { this.state = state; this.animation = null; this.redraw(); callback && callback.call(this); }.bind(this) }); }, getGatesImage: function () { return (this.animation && this.animation.get()) || 'gates-' + this.state; }, renderTo: function (ctx) { this.drawImage(ctx, this.getGatesImage()); this.drawImage(ctx, 'static-carcass'); }, drawImage: function (ctx, image) { if (typeof image == 'string') { image = this.layer.app.resources.get('images').get(image); } ctx.drawImage({ image : image, center: this.shape.center }); }, }); 



рдЦреАрдВрдЪрдиреЗ рдпреЛрдЧреНрдп рдкрд░рддреЗрдВ


рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рдлреА рдмрдбрд╝рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде рднреА рдпрд╣ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реНрдХреНрд░реАрди рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рд╕реЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо "рдбреНрд░реИрдЧреЗрдмрд▓" рдкрд░рдд рдХреЛ рдЬрдХрдбрд╝рддреЗ рд╣реИрдВред рдЯреА рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдорд╛рдЙрд╕ рдмрдЯрди рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╡реНрдпрд╕реНрдд рд╣реИрдВ - рдорд╛рдЙрд╕ рд╡реНрд╣реАрд▓ рдХреЛ рджрдмрд╛рдХрд░ рдФрд░ рдЦреАрдВрдЪрдХрд░ рд╕реНрдХреНрд░реЙрд▓ рдХреЛ рддреЗрдЬ рдХрд░реЗрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдУрдкреЗрд░рд╛-рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╢рд┐рдлреНрдЯ + рдХреНрд▓рд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдореЛрдб рдореЗрдВ, рдПрдХ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдорд╛рдЙрд╕ рд╕реАрдорд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдерд╛ред

рд╕рд┐рджреНрдзрд╛рдВрдд рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓реЗрдВ)ред

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

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд┐рд▓реНрдЯ-рдЗрди рдХреНрд▓рд╛рд╕ App.Dragger рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрдВ рд╣рдорд╛рд░реА рдкрд░рдд рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдХреЙрд▓рдмреИрдХ рдореЗрдВ, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рдбреНрд░реИрдЧ рдХреЛ рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦреИрд░, рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдбреНрд░реЗрдЬ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ - рдПрдХ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдФрд░ рдиреНрдпреВрдирддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗред

рдкрд░рдд рдХреЛ рдкрд╛рдЧрд▓ рдмрдирд╛рдирд╛
  initDragger: function () { this.shift = new App.LayerShift(this.layer); this.updateShiftLimit(); new App.Dragger( this.mouse ) .addLayerShift( this.shift ) .start(function (e) { return e.button == 1 || e.shiftKey; }); }, updateShiftLimit: function () { var padding = new Point(64, 64); this.shift.setLimitShift(new Rectangle( new Point(this.app.container.size) .move(this.layerSize, true) .move(padding, true), padding )); }, 



рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреНрд░реИрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдбреНрд░рд╛рдЗрдВрдЧ рдЬрдореА рд╣реБрдИ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдкреБрд░рд╛рдиреЗ рдЦрд┐рд▓реМрдиреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рд░рд╛рдУрдВ рдФрд░ рд╕реАрдЬрд╝рд░ 3 рдкрд░ рджреЗрдЦрд╛ - рдЬрдм рдореИрдВрдиреЗ рд╡рд╣рд╛рдБ рдирдХреНрд╢рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ - рдПрдирд┐рдореЗрд╢рди рдмрдВрдж рд╣реЛ рдЧрдП, рдФрд░ "рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЭреБрдХрд╛рд╡" рдЖрдк рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рдереЗред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╡рдВрд╢рдЬ App.Dragger рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рдорд╛рдЙрд╕ рд╣реИрдВрдбрд▓рд░ рдЕрдиреБрдХреВрд▓рди


рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдордп рдореЗрдВ рдЬрд┐рд╕ рд╡рд┐рд╖рдп рдХреЛ рдЫреБрдЖ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдПрдХ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреВрд▓рди рд╣реИред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣реИрдВрдбрд▓рд░ рд╢реБрд░реВ рдореЗрдВ рдПрдХ рдзреАрдореА рдЧрддрд┐ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо - рдпрд╣ рдорд╛рдЙрд╕ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рддрддреНрд╡реЛрдВ рдХреЗ рд╕рднреА рдЖрдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд░ рдпрд╣ 5 * 5 рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдкреЗрд╢реЗрд╡рд░ 30/16 рдЖрдХрд╛рд░ рдЖрдзрд╛ рд╣рдЬрд╛рд░ рд╣реИ рдРрд╕реЗ рддрддреНрд╡ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЙрд╕ рдЖрдВрджреЛрд▓рди рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдФрд░ 100 * 100 рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ 10,000 рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдВрдЧреЗ ред рдЪреЗрд╣рд░реЗ рдкрд░ рджреНрд╡рд┐рдШрд╛рдд рд╡реГрджреНрдзрд┐ (

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

 this.mouseHandler = new App.MouseHandler({ mouse: this.mouse, app: this.app, search: new IsoMines.FastSearch(this.shift, this.projection) }); 


рд╣рдорд╛рд░реЗ рдЦреЗрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкреВрд░реЗ рддрддреНрд╡ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реИрд╢ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ IsometricEngine.Projection.to3D рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗ - рдЗрд╕рд▓рд┐рдП O(N 2 ) рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ O(C) рдЬрдЯрд┐рд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ - рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреА рдирд┐рд░рдВрддрд░ рдЧрддрд┐ред

рдХреНрд▓рд┐рдХ рдХреА рдЧрдИ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ
 /** @class IsoMines.FastSearch */ atom.declare( 'IsoMines.FastSearch', App.ElementsMouseSearch, { initialize: function (shift, projection) { this.projection = projection; this.shift = shift; this.cells = {}; }, add: function (cell) { return this.set(cell, cell); }, remove: function (cell) { return this.set(cell, null); }, set: function (cell, value) { this.cells[cell.point.y + '.' + cell.point.x] = value; return this; }, findByPoint: function (point) { point = point.clone().move(this.shift.getShift(), true); var path = this.projection.to3D(point), cell = this.cells[Math.floor(path.y) + '.' + Math.floor(path.x)]; return cell ? [ cell ] : []; } }); 



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

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


рдХреЗ рдмрд╛рдж:


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

рдкреНрд▓реЗ рдЖрдЗрд╕реЛрдореЗрдЯреНрд░рд┐рдХ "рдорд╛рдЗрдирд╕реНрд╡реАрдкрд░"



рдкреЛрд╕реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ


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

рдФрд░ рд╣рд╛рдБ, рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдБ рдирд╣реАрдВ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣реЛрдмреЗ рдкрд░ - рдИрдореЗрд▓ рдкрд░ рд▓рд┐рдЦреЗрдВ: shocksilien@gmail.com

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


All Articles