/* * SpriteSheet * Visit http://createjs.com/ for documentation, updates and examples. * * Copyright (c) 2010 gskinner.com, inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ // namespace: this.createjs = this.createjs||{}; (function() { /** * Encapsulates the properties and methods associated with a sprite sheet. A sprite sheet is a series of images (usually * animation frames) combined into a larger image (or images). For example, an animation consisting of eight 100x100 * images could be combined into a single 400x200 sprite sheet (4 frames across by 2 high). * * The data passed to the SpriteSheet constructor defines three critical pieces of information:
var sheet = new SpriteSheet(data);
* if (!sheet.complete) {
* // not preloaded, listen for onComplete:
* sheet.addEventListener("complete", handler);
* }
* @event complete
* @param {Object} target The object that dispatched the event.
* @param {String} type The event type.
* @since 0.6.0
*/
// public properties:
/**
* Read-only property indicating whether all images are finished loading.
* @property complete
* @type Boolean
**/
p.complete = true;
/**
* The onComplete callback is called when all images are loaded. Note that this only fires if the images
* were not fully loaded when the sprite sheet was initialized. You should check the complete property
* to prior to adding an onComplete handler. Ex.
* var sheet = new SpriteSheet(data);
* if (!sheet.complete) {
* // not preloaded, listen for onComplete:
* sheet.onComplete = handler;
* }
* @property onComplete
* @type Function
* @deprecated In favour of the "complete" event. Will be removed in a future version.
**/
p.onComplete = null;
// mix-ins:
// EventDispatcher methods:
p.addEventListener = null;
p.removeEventListener = null;
p.removeAllEventListeners = null;
p.dispatchEvent = null;
p.hasEventListener = null;
p._listeners = null;
createjs.EventDispatcher.initialize(p); // inject EventDispatcher methods.
// private properties:
/**
* @property _animations
* @protected
**/
p._animations = null;
/**
* @property _frames
* @protected
**/
p._frames = null;
/**
* @property _images
* @protected
**/
p._images = null;
/**
* @property _data
* @protected
**/
p._data = null;
/**
* @property _loadCount
* @protected
**/
p._loadCount = 0;
// only used for simple frame defs:
/**
* @property _frameHeight
* @protected
**/
p._frameHeight = 0;
/**
* @property _frameWidth
* @protected
**/
p._frameWidth = 0;
/**
* @property _numFrames
* @protected
**/
p._numFrames = 0;
/**
* @property _regX
* @protected
**/
p._regX = 0;
/**
* @property _regY
* @protected
**/
p._regY = 0;
// constructor:
/**
* @method initialize
* @protected
**/
p.initialize = function(data) {
var i,l,o,a;
if (data == null) { return; }
// parse images:
if (data.images && (l=data.images.length) > 0) {
a = this._images = [];
for (i=0; i