mirror of
https://github.com/logsol/chuck.js.git
synced 2026-05-11 10:37:34 +00:00
205 lines
4.4 KiB
JavaScript
205 lines
4.4 KiB
JavaScript
/**
|
|
* @author Mat Groves http://matgroves.com/ @Doormat23
|
|
*/
|
|
|
|
/**
|
|
* A MovieClip is a simple way to display an animation depicted by a list of textures.
|
|
*
|
|
* @class MovieClip
|
|
* @extends Sprite
|
|
* @constructor
|
|
* @param textures {Array(Texture)} an array of {Texture} objects that make up the animation
|
|
*/
|
|
PIXI.MovieClip = function(textures)
|
|
{
|
|
PIXI.Sprite.call(this, textures[0]);
|
|
|
|
/**
|
|
* The array of textures that make up the animation
|
|
*
|
|
* @property textures
|
|
* @type Array(Texture)
|
|
*/
|
|
this.textures = textures;
|
|
|
|
/**
|
|
* The speed that the MovieClip will play at. Higher is faster, lower is slower
|
|
*
|
|
* @property animationSpeed
|
|
* @type Number
|
|
* @default 1
|
|
*/
|
|
this.animationSpeed = 1;
|
|
|
|
/**
|
|
* Whether or not the movie clip repeats after playing.
|
|
*
|
|
* @property loop
|
|
* @type Boolean
|
|
* @default true
|
|
*/
|
|
this.loop = true;
|
|
|
|
/**
|
|
* Function to call when a MovieClip finishes playing
|
|
*
|
|
* @property onComplete
|
|
* @type Function
|
|
*/
|
|
this.onComplete = null;
|
|
|
|
/**
|
|
* [read-only] The MovieClips current frame index (this may not have to be a whole number)
|
|
*
|
|
* @property currentFrame
|
|
* @type Number
|
|
* @default 0
|
|
* @readOnly
|
|
*/
|
|
this.currentFrame = 0;
|
|
|
|
/**
|
|
* [read-only] Indicates if the MovieClip is currently playing
|
|
*
|
|
* @property playing
|
|
* @type Boolean
|
|
* @readOnly
|
|
*/
|
|
this.playing = false;
|
|
};
|
|
|
|
// constructor
|
|
PIXI.MovieClip.prototype = Object.create( PIXI.Sprite.prototype );
|
|
PIXI.MovieClip.prototype.constructor = PIXI.MovieClip;
|
|
|
|
/**
|
|
* [read-only] totalFrames is the total number of frames in the MovieClip. This is the same as number of textures
|
|
* assigned to the MovieClip.
|
|
*
|
|
* @property totalFrames
|
|
* @type Number
|
|
* @default 0
|
|
* @readOnly
|
|
*/
|
|
Object.defineProperty( PIXI.MovieClip.prototype, 'totalFrames', {
|
|
get: function() {
|
|
|
|
return this.textures.length;
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Stops the MovieClip
|
|
*
|
|
* @method stop
|
|
*/
|
|
PIXI.MovieClip.prototype.stop = function()
|
|
{
|
|
this.playing = false;
|
|
};
|
|
|
|
/**
|
|
* Plays the MovieClip
|
|
*
|
|
* @method play
|
|
*/
|
|
PIXI.MovieClip.prototype.play = function()
|
|
{
|
|
this.playing = true;
|
|
};
|
|
|
|
/**
|
|
* Stops the MovieClip and goes to a specific frame
|
|
*
|
|
* @method gotoAndStop
|
|
* @param frameNumber {Number} frame index to stop at
|
|
*/
|
|
PIXI.MovieClip.prototype.gotoAndStop = function(frameNumber)
|
|
{
|
|
this.playing = false;
|
|
this.currentFrame = frameNumber;
|
|
var round = (this.currentFrame + 0.5) | 0;
|
|
this.setTexture(this.textures[round % this.textures.length]);
|
|
};
|
|
|
|
/**
|
|
* Goes to a specific frame and begins playing the MovieClip
|
|
*
|
|
* @method gotoAndPlay
|
|
* @param frameNumber {Number} frame index to start at
|
|
*/
|
|
PIXI.MovieClip.prototype.gotoAndPlay = function(frameNumber)
|
|
{
|
|
this.currentFrame = frameNumber;
|
|
this.playing = true;
|
|
};
|
|
|
|
/*
|
|
* Updates the object transform for rendering
|
|
*
|
|
* @method updateTransform
|
|
* @private
|
|
*/
|
|
PIXI.MovieClip.prototype.updateTransform = function()
|
|
{
|
|
this.displayObjectContainerUpdateTransform();
|
|
|
|
if(!this.playing)return;
|
|
|
|
this.currentFrame += this.animationSpeed;
|
|
|
|
var round = (this.currentFrame + 0.5) | 0;
|
|
|
|
this.currentFrame = this.currentFrame % this.textures.length;
|
|
|
|
if(this.loop || round < this.textures.length)
|
|
{
|
|
this.setTexture(this.textures[round % this.textures.length]);
|
|
}
|
|
else if(round >= this.textures.length)
|
|
{
|
|
this.gotoAndStop(this.textures.length - 1);
|
|
if(this.onComplete)
|
|
{
|
|
this.onComplete();
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* A short hand way of creating a movieclip from an array of frame ids
|
|
*
|
|
* @static
|
|
* @method fromFrames
|
|
* @param frames {Array} the array of frames ids the movieclip will use as its texture frames
|
|
*/
|
|
PIXI.MovieClip.fromFrames = function(frames)
|
|
{
|
|
var textures = [];
|
|
|
|
for (var i = 0; i < frames.length; i++)
|
|
{
|
|
textures.push(new PIXI.Texture.fromFrame(frames[i]));
|
|
}
|
|
|
|
return new PIXI.MovieClip(textures);
|
|
};
|
|
|
|
/**
|
|
* A short hand way of creating a movieclip from an array of image ids
|
|
*
|
|
* @static
|
|
* @method fromImages
|
|
* @param frames {Array} the array of image ids the movieclip will use as its texture frames
|
|
*/
|
|
PIXI.MovieClip.fromImages = function(images)
|
|
{
|
|
var textures = [];
|
|
|
|
for (var i = 0; i < images.length; i++)
|
|
{
|
|
textures.push(new PIXI.Texture.fromImage(images[i]));
|
|
}
|
|
|
|
return new PIXI.MovieClip(textures);
|
|
};
|