%PDF- %PDF-
Direktori : /home/jalalj2hb/www/ftm-admin/bower_components/kineticjs/src/shapes/ |
Current File : /home/jalalj2hb/www/ftm-admin/bower_components/kineticjs/src/shapes/Sprite.js |
(function() { /** * Sprite constructor * @constructor * @memberof Kinetic * @augments Kinetic.Shape * @param {Object} config * @param {String} config.animation animation key * @param {Object} config.animations animation map * @param {Integer} [config.frameIndex] animation frame index * @param {Image} config.image image object * @@shapeParams * @@nodeParams * @example * var imageObj = new Image();<br> * imageObj.onload = function() {<br> * var sprite = new Kinetic.Sprite({<br> * x: 200,<br> * y: 100,<br> * image: imageObj,<br> * animation: 'standing',<br> * animations: {<br> * standing: [<br> * // x, y, width, height (6 frames)<br> * 0, 0, 49, 109,<br> * 52, 0, 49, 109,<br> * 105, 0, 49, 109,<br> * 158, 0, 49, 109,<br> * 210, 0, 49, 109,<br> * 262, 0, 49, 109<br> * ],<br> * kicking: [<br> * // x, y, width, height (6 frames)<br> * 0, 109, 45, 98,<br> * 45, 109, 45, 98,<br> * 95, 109, 63, 98,<br> * 156, 109, 70, 98,<br> * 229, 109, 60, 98,<br> * 287, 109, 41, 98<br> * ]<br> * },<br> * frameRate: 7,<br> * frameIndex: 0<br> * });<br> * };<br> * imageObj.src = '/path/to/image.jpg' */ Kinetic.Sprite = function(config) { this.___init(config); }; Kinetic.Sprite.prototype = { ___init: function(config) { // call super constructor Kinetic.Shape.call(this, config); this.className = 'Sprite'; this.anim = new Kinetic.Animation(); this.on('animationChange.kinetic', function() { // reset index when animation changes this.frameIndex(0); }); // smooth change for frameRate this.on('frameRateChange.kinetic', function() { if (!this.anim.isRunning()) { return; } clearInterval(this.interval); this._setInterval(); }); this.sceneFunc(this._sceneFunc); this.hitFunc(this._hitFunc); }, _sceneFunc: function(context) { var anim = this.getAnimation(), index = this.frameIndex(), ix4 = index * 4, set = this.getAnimations()[anim], x = set[ix4 + 0], y = set[ix4 + 1], width = set[ix4 + 2], height = set[ix4 + 3], image = this.getImage(); if(image) { context.drawImage(image, x, y, width, height, 0, 0, width, height); } }, _hitFunc: function(context) { var anim = this.getAnimation(), index = this.frameIndex(), ix4 = index * 4, set = this.getAnimations()[anim], width = set[ix4 + 2], height = set[ix4 + 3]; context.beginPath(); context.rect(0, 0, width, height); context.closePath(); context.fillShape(this); }, _useBufferCanvas: function() { return (this.hasShadow() || this.getAbsoluteOpacity() !== 1) && this.hasStroke(); }, _setInterval: function() { var that = this; this.interval = setInterval(function() { that._updateIndex(); }, 1000 / this.getFrameRate()); }, /** * start sprite animation * @method * @memberof Kinetic.Sprite.prototype */ start: function() { var layer = this.getLayer(); /* * animation object has no executable function because * the updates are done with a fixed FPS with the setInterval * below. The anim object only needs the layer reference for * redraw */ this.anim.setLayers(layer); this._setInterval(); this.anim.start(); }, /** * stop sprite animation * @method * @memberof Kinetic.Sprite.prototype */ stop: function() { this.anim.stop(); clearInterval(this.interval); }, /** * determine if animation of sprite is running or not. returns true or false * @method * @memberof Kinetic.Animation.prototype * @returns {Boolean} */ isRunning: function() { return this.anim.isRunning(); }, _updateIndex: function() { var index = this.frameIndex(), animation = this.getAnimation(), animations = this.getAnimations(), anim = animations[animation], len = anim.length / 4; if(index < len - 1) { this.frameIndex(index + 1); } else { this.frameIndex(0); } } }; Kinetic.Util.extend(Kinetic.Sprite, Kinetic.Shape); // add getters setters Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'animation'); /** * get/set animation key * @name animation * @method * @memberof Kinetic.Sprite.prototype * @param {String} anim animation key * @returns {String} * @example * // get animation key<br> * var animation = sprite.animation();<br><br> * * // set animation key<br> * sprite.animation('kicking'); */ Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'animations'); /** * get/set animations map * @name animations * @method * @memberof Kinetic.Sprite.prototype * @param {Object} animations * @returns {Object} * @example * // get animations map<br> * var animations = sprite.animations();<br><br> * * // set animations map<br> * sprite.animations({<br> * standing: [<br> * // x, y, width, height (6 frames)<br> * 0, 0, 49, 109,<br> * 52, 0, 49, 109,<br> * 105, 0, 49, 109,<br> * 158, 0, 49, 109,<br> * 210, 0, 49, 109,<br> * 262, 0, 49, 109<br> * ],<br> * kicking: [<br> * // x, y, width, height (6 frames)<br> * 0, 109, 45, 98,<br> * 45, 109, 45, 98,<br> * 95, 109, 63, 98,<br> * 156, 109, 70, 98,<br> * 229, 109, 60, 98,<br> * 287, 109, 41, 98<br> * ]<br> * }); */ Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'image'); /** * get/set image * @name image * @method * @memberof Kinetic.Sprite.prototype * @param {Image} image * @returns {Image} * @example * // get image * var image = sprite.image();<br><br> * * // set image<br> * sprite.image(imageObj); */ Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'frameIndex', 0); /** * set/set animation frame index * @name frameIndex * @method * @memberof Kinetic.Sprite.prototype * @param {Integer} frameIndex * @returns {Integer} * @example * // get animation frame index<br> * var frameIndex = sprite.frameIndex();<br><br> * * // set animation frame index<br> * sprite.frameIndex(3); */ Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'frameRate', 17); /** * get/set frame rate in frames per second. Increase this number to make the sprite * animation run faster, and decrease the number to make the sprite animation run slower * The default is 17 frames per second * @name frameRate * @method * @memberof Kinetic.Sprite.prototype * @param {Integer} frameRate * @returns {Integer} * @example * // get frame rate<br> * var frameRate = sprite.frameRate();<br><br> * * // set frame rate to 2 frames per second<br> * sprite.frameRate(2); */ Kinetic.Factory.backCompat(Kinetic.Sprite, { index: 'frameIndex', getIndex: 'getFrameIndex', setIndex: 'setFrameIndex' }); Kinetic.Collection.mapMethods(Kinetic.Sprite); })();