LibCanvas рдореВрд▓ рдмрд╛рддреЗрдВ - рдЕрднреНрдпрд╛рд╕



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



рдПрдЪрдЯреАрдПрдордПрд▓


HTML рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <script src="atom.js"></script> <script src="libcanvas.js"></script> <script src="application.js"></script> </head> <body> <canvas></canvas> </body> </html> 


рдЖрдкрдХреЛ рдирд╡реАрдирддрдо AtomJS рдФрд░ LibCanvas рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реБрд░реБрдЖрддреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ *-full-compiled рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

рдЖрдЧреЗ рд╣рдо application.js рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ

рд╕рд░рд▓ рдХреИрдирд╡рд╛рд╕ рдкреЗрдВрдЯрд┐рдВрдЧ


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

рдЕрдм рд╣рдо рдПрдХ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдЖрдпрдд рдФрд░ рдПрдХ рд╣рд▓реНрдХрд╛ рдХреЙрдлреА рдХреИрдирд╡рд╛рд╕ рдкрд░ рдПрдХ рд▓рд╛рд▓ рд╡реГрддреНрдд рдмрдирд╛рддреЗ рд╣реИрдВ:
 LibCanvas.extract(); atom.dom(function() { var canvas = atom.dom('canvas').first; var context = canvas.getContext('2d-libcanvas'); context .fillAll( '#efebe7' ) .fill( new Rectangle( 75, 75, 30, 30 ), 'green' ) .fill( new Circle ( 50, 50, 20 ) , '#c00' ); }); 



рдПрдиреАрдореЗрд╢рди


рд▓реЗрдХрд┐рди рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реНрдерд┐рд░ рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреБрдЫ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ LibCanvas рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд▓реЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ - рдПрдХ рдХрд╛рд▓рд╛ рдХреИрдирд╡рд╛рд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╣рд░реЗ рдЖрдпрддреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИред
рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
1. рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╣рд░ рдлреНрд░реЗрдо рдХреЛ рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ { clear: null } рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛
2. рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рд╕рдорд╛рд░реЛрд╣ рдкреНрд░рддрд┐рдкрд╛рджрди рдЪрд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ .addFunc( libcanvas.update ) рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдирд┐рд░реНрдгрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИред

 var libcanvas = new LibCanvas('canvas', { clear: null }); libcanvas.ctx.fillAll('black'); libcanvas .start(function () { this.ctx.fill( new Rectangle({ from: this.ctx.rectangle.getRandomPoint(), size: [ 2, 2 ] }), 'green' ); }) .addFunc( libcanvas.update ); 



рд╡рд╕реНрддреБрдПрдВ


рдЕрдм рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕реЗ рдХрд╛рд▓реЗ рд░рдВрдЧ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реЛрдиреЗ рджреЗрдВ рдЬреЛ рдЗрд╕рдХреЗ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдореЗрдЧрд╛ред рдЗрд╕ рдмрд╛рд░ рд╣рдореЗрдВ рдЕрдЧрд▓рд╛ рдлреНрд░реЗрдо рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреИрдирд╡рд╛рд╕ рдХреЛ рд╕рд╛рдл рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╣рдо рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ:

 var Item = atom.Class({ Implements: [ Drawable ], //       - // Point -          initialize: function (center, speed) { this.line = new Line( center, //          //         center.clone().move([ 20, 0 ]) ); //    ,      //       "/" this.speed = speed / 1000; }, update: function (time) { //        this.line.to.rotate( //  ,       fps  //     .  fps ,  //   ,       this.speed * time, this.line.from ); //   libcanvas,   //         this.libcanvas.update(); }, draw: function () { //    this.libcanvas.ctx .stroke( this.line, 'black' ); } }); var libcanvas = new LibCanvas('canvas'); //     //     .        //       . //         var item = new Item( new Point(50, 50), (180).degree() ); libcanvas.addElement( item ) //     "" LibCanvas,     "start" .start() //  ,      "item.update",     //   ,      bind  : .addFunc( item.update.bind(item) ); 


рд╣рдореЗрдВ рдПрдХ рдЪрд░рдЦрд╛ рдорд┐рд▓рд╛ред

рдорд╛рдЙрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛


рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рддреАрд░ рдХреЛ рдПрдХ рд▓рд╛рд▓ рд╕рд░реНрдХрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрджрд▓реА рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ shape рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдИ рд╣реИ, рди рдХрд┐ circle ред рдпрд╣ рдбреНрд░реИрдЧреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

 var Item = atom.Class({ Implements: [ Drawable, Draggable /*  */ ], [...] initialize: function (center, speed) { [...] //   this.shape = new Circle( center, 25 ); }, [...] draw: function () { [...] .stroke( this.shape, '#c00' ); } }); [...] libcanvas.listenMouse(); item.draggable() 


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

 initialize: function (center, speed) { [...] // ,        center.addEvent('move', function (diff) { this.line.to.move(diff); }.bind(this)) }, 


рдЕрдм рд╕рд╣реА рд╣реИ

рд╕реНрдЯреЙрдкрд╡реЙрдЪ рджреЗрдЦрдиреА


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

 var StopWatch = atom.Class({ Implements: [ Drawable, Draggable ], initialize: function (center) { this.center = center; this.millisec = this.line(); this.seconds = this.line(); this.minutes = this.line(); this.shape = new Circle( center, 25 ); center.addEvent('move', function (diff) { //    "move"   "diff"    [this.millisec.to, this.seconds.to, this.minutes.to].invoke('move', diff); }.bind(this)); }, //      line: function () { return new Line( this.center, this.center.clone().move([0, -20]) ); }, update: function (time) { var full = (360).degree(); //  toSeconds, toMinutes  toHours   LibCanvas.Utils.Math //         this.millisec.to.rotate( full * time.toSeconds(), this.center ); //  -   this.seconds .to.rotate( full * time.toMinutes(), this.center ); //  -   this.minutes .to.rotate( full * time.toHours() , this.center ); this.libcanvas.update(); }, draw: function () { this.libcanvas.ctx .stroke( this.shape , '#c00' ) .stroke( this.millisec, '#999' ) .stroke( this.seconds , '#000' ) .stroke( this.minutes , '#090' ); } }); 


рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ!

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ - рддреЛ рдЖрдк рдмреЗрдЭрд┐рдЭрдХ рдХрдореЗрдВрдЯ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдИрдореЗрд▓ shocksilien@gmail.com рдкрд░ рдпрд╛ jabber shock@jabber.com.ua рдкрд░

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


All Articles