Sprite animations keys are now set to arrays of integers, not array of object literals containing x y width and height. changed index attr to frameIndex

This commit is contained in:
Eric Rowell 2014-01-07 00:43:31 -08:00
parent e594aa5656
commit 4d8ee45f71
9 changed files with 218 additions and 359 deletions

View File

@ -25,7 +25,7 @@ module.exports = function(grunt) {
'src/filters/Sepia.js', 'src/filters/Sepia.js',
'src/filters/Solarize.js', 'src/filters/Solarize.js',
//'src/filters/Ripple.js', //'src/filters/Ripple.js',
//'src/filters/Kaleidoscope.js', 'src/filters/Kaleidoscope.js',
// core // core
'src/Animation.js', 'src/Animation.js',

View File

@ -4,8 +4,7 @@
* @constructor * @constructor
* @augments Kinetic.Shape * @augments Kinetic.Shape
* @param {Object} config * @param {Object} config
* @param {Number} config.angle * @param {Number} config.angle in degrees
* @param {Number} config.angleDeg angle in degrees
* @param {Number} config.innerRadius * @param {Number} config.innerRadius
* @param {Number} config.outerRadius * @param {Number} config.outerRadius
* @param {Boolean} [config.clockwise] * @param {Boolean} [config.clockwise]
@ -13,13 +12,13 @@
* @@nodeParams * @@nodeParams
* @example * @example
* // draw a Arc that's pointing downwards<br> * // draw a Arc that's pointing downwards<br>
* var Arc = new Kinetic.Arc({<br> * var arc = new Kinetic.Arc({<br>
* innerRadius: 40,<br> * innerRadius: 40,<br>
* outerRadius: 80,<br> * outerRadius: 80,<br>
* fill: 'red',<br> * fill: 'red',<br>
* stroke: 'black'<br> * stroke: 'black'<br>
* strokeWidth: 5,<br> * strokeWidth: 5,<br>
* angleDeg: 60,<br> * angle: 60,<br>
* rotationDeg: -120<br> * rotationDeg: -120<br>
* }); * });
*/ */

View File

@ -6,9 +6,10 @@
* @memberof Kinetic * @memberof Kinetic
* @augments Kinetic.Shape * @augments Kinetic.Shape
* @param {Object} config * @param {Object} config
* @param {Array} config.points can be a flattened array of points, an array of point arrays, or an array of point objects. * @param {Array} config.points
* e.g. [0,1,2,3], [[0,1],[2,3]] and [{x:0,y:1},{x:2,y:3}] are equivalent * @param {Number} [config.tension] Higher values will result in a more curvy line. A value of 0 will result in no interpolation.
* @param {Number} [config.tension] default value is 1. Higher values will result in a more curvy line. A value of 0 will result in no interpolation. * The default is 0
* @param {Boolean} [config.closed] defines whether or not the line shape is closed, creating a polygon or blob
* @@shapeParams * @@shapeParams
* @@nodeParams * @@nodeParams
* @example * @example
@ -144,54 +145,57 @@
Kinetic.Factory.addGetterSetter(Kinetic.Line, 'closed', false); Kinetic.Factory.addGetterSetter(Kinetic.Line, 'closed', false);
/** /**
* get closed * get/set closed flag. The default is false
* @name getClosed * @name closed
* @method
* @memberof Kinetic.Line.prototype
* @returns {Boolean}
*/
/**
* set closed
* @name setClosed
* @method * @method
* @memberof Kinetic.Line.prototype * @memberof Kinetic.Line.prototype
* @param {Boolean} closed * @param {Boolean} closed
* @returns {Boolean}
* @example
* // get closed flag<br>
* var closed = line.closed();<br><br>
*
* // close the shape<br>
* line.closed(true);<br><br>
*
* // open the shape<br>
* line.closed(false);
*/ */
Kinetic.Factory.addGetterSetter(Kinetic.Line, 'tension', 0); Kinetic.Factory.addGetterSetter(Kinetic.Line, 'tension', 0);
/** /**
* get tension * get/set tension
* @name getTension * @name tension
* @method * @method
* @memberof Kinetic.Line.prototype * @memberof Kinetic.Line.prototype
* @param {Number} Higher values will result in a more curvy line. A value of 0 will result in no interpolation.
* The default is 0
* @returns {Number} * @returns {Number}
*/ * @example
* // get tension<br>
/** * var tension = line.tension();<br><br>
* set tension *
* @name setTension * // set tension<br>
* @method * line.tension(3);
* @memberof Kinetic.Line.prototype
* @param {Number} tension
*/ */
Kinetic.Factory.addGetterSetter(Kinetic.Line, 'points'); Kinetic.Factory.addGetterSetter(Kinetic.Line, 'points');
/** /**
* get points array * get/set points array
* @name getPoints * @name points
* @method * @method
* @memberof Kinetic.Line.prototype * @memberof Kinetic.Line.prototype
* @param {Array} points
* @returns {Array} * @returns {Array}
*/ * @example
* // get points<br>
/** * var points = line.points();<br><br>
* set points array *
* @name setPoints * // set points<br>
* @method * line.points([10, 20, 30, 40, 50, 60]);<br><br>
* @memberof Kinetic.Line.prototype *
* @param {Array} can be an array of point objects or an array * // push a new point<br>
* of Numbers. e.g. [{x:1,y:2},{x:3,y:4}] or [1,2,3,4] * line.points(line.points().concat([70, 80]));
*/ */
})(); })();

View File

@ -59,21 +59,18 @@
Kinetic.Util.extend(Kinetic.Rect, Kinetic.Shape); Kinetic.Util.extend(Kinetic.Rect, Kinetic.Shape);
Kinetic.Factory.addGetterSetter(Kinetic.Rect, 'cornerRadius', 0); Kinetic.Factory.addGetterSetter(Kinetic.Rect, 'cornerRadius', 0);
/** /**
* set corner radius * get/set corner radius
* @name setCornerRadius * @name cornerRadius
* @method
* @memberof Kinetic.Rect.prototype
* @param {Number} corner radius
*/
/**
* get corner radius
* @name getCornerRadius
* @method * @method
* @memberof Kinetic.Rect.prototype * @memberof Kinetic.Rect.prototype
* @param {Number} cornerRadius
* @returns {Number} * @returns {Number}
* @example
* // get corner radius<br>
* var cornerRadius = rect.cornerRadius();<br><br>
*
* // set corner radius<br>
* rect.cornerRadius(10);
*/ */
})(); })();

View File

@ -7,15 +7,14 @@
* @constructor * @constructor
* @augments Kinetic.Shape * @augments Kinetic.Shape
* @param {Object} config * @param {Object} config
* @param {Number} config.angle * @param {Number} config.angle in degrees
* @param {Number} config.angleDeg angle in degrees
* @param {Number} config.innerRadius * @param {Number} config.innerRadius
* @param {Number} config.outerRadius * @param {Number} config.outerRadius
* @param {Boolean} [config.clockwise] * @param {Boolean} [config.clockwise]
* @@shapeParams * @@shapeParams
* @@nodeParams * @@nodeParams
* @example * @example
* var Ring = new Kinetic.Ring({<br> * var ring = new Kinetic.Ring({<br>
* innerRadius: 40,<br> * innerRadius: 40,<br>
* outerRadius: 80,<br> * outerRadius: 80,<br>
* fill: 'red',<br> * fill: 'red',<br>
@ -69,19 +68,18 @@
}); });
/** /**
* set innerRadius * get/set innerRadius
* @name setInnerRadius * @name innerRadius
* @method * @method
* @memberof Kinetic.Ring.prototype * @memberof Kinetic.Ring.prototype
* @param {Number} innerRadius * @param {Number} innerRadius
*/
/**
* get innerRadius
* @name getInnerRadius
* @method
* @memberof Kinetic.Ring.prototype
* @returns {Number} * @returns {Number}
* @example
* // get inner radius<br>
* var innerRadius = ring.innerRadius();<br><br>
*
* // set inner radius<br>
* ring.innerRadius(20);
*/ */
Kinetic.Factory.addGetterSetter(Kinetic.Ring, 'outerRadius', function() { Kinetic.Factory.addGetterSetter(Kinetic.Ring, 'outerRadius', function() {
@ -89,18 +87,17 @@
}); });
/** /**
* set outerRadius * get/set outerRadius
* @name setOuterRadius * @name outerRadius
* @method
* @memberof Kinetic.Ring.prototype
* @param {Number} innerRadius
*/
/**
* get outerRadius
* @name getOuterRadius
* @method * @method
* @memberof Kinetic.Ring.prototype * @memberof Kinetic.Ring.prototype
* @param {Number} outerRadius
* @returns {Number} * @returns {Number}
* @example
* // get outer radius<br>
* var outerRadius = ring.outerRadius();<br><br>
*
* // set outer radius<br>
* ring.outerRadius(20);
*/ */
})(); })();

View File

@ -12,56 +12,35 @@
* @@shapeParams * @@shapeParams
* @@nodeParams * @@nodeParams
* @example * @example
* var animations = {<br>
* idle: [{<br>
* x: 2,<br>
* y: 2,<br>
* width: 70,<br>
* height: 119<br>
* }, {<br>
* x: 71,<br>
* y: 2,<br>
* width: 74,<br>
* height: 119<br>
* }, {<br>
* x: 146,<br>
* y: 2,<br>
* width: 81,<br>
* height: 119<br>
* }, {<br>
* x: 226,<br>
* y: 2,<br>
* width: 76,<br>
* height: 119<br>
* }],<br>
* punch: [{<br>
* x: 2,<br>
* y: 138,<br>
* width: 74,<br>
* height: 122<br>
* }, {<br>
* x: 76,<br>
* y: 138,<br>
* width: 84,<br>
* height: 122<br>
* }, {<br>
* x: 346,<br>
* y: 138,<br>
* width: 120,<br>
* height: 122<br>
* }]<br>
* };<br><br>
*
* var imageObj = new Image();<br> * var imageObj = new Image();<br>
* imageObj.onload = function() {<br> * imageObj.onload = function() {<br>
* var sprite = new Kinetic.Sprite({<br> * var sprite = new Kinetic.Sprite({<br>
* x: 200,<br> * x: 200,<br>
* y: 100,<br> * y: 100,<br>
* image: imageObj,<br> * image: imageObj,<br>
* animation: 'idle',<br> * animation: 'standing',<br>
* animations: animations,<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> * frameRate: 7,<br>
* index: 0<br> * frameIndex: 0<br>
* });<br> * });<br>
* };<br> * };<br>
* imageObj.src = '/path/to/image.jpg' * imageObj.src = '/path/to/image.jpg'
@ -79,7 +58,7 @@
this.anim = new Kinetic.Animation(); this.anim = new Kinetic.Animation();
this.on('animationChange.kinetic', function() { this.on('animationChange.kinetic', function() {
// reset index when animation changes // reset index when animation changes
this.setIndex(0); this.frameIndex(0);
}); });
this.sceneFunc(this._sceneFunc); this.sceneFunc(this._sceneFunc);
@ -87,21 +66,29 @@
}, },
_sceneFunc: function(context) { _sceneFunc: function(context) {
var anim = this.getAnimation(), var anim = this.getAnimation(),
index = this.getIndex(), index = this.frameIndex(),
f = this.getAnimations()[anim][index], 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(); image = this.getImage();
if(image) { if(image) {
context.drawImage(image, f.x, f.y, f.width, f.height, 0, 0, f.width, f.height); context.drawImage(image, x, y, width, height, 0, 0, width, height);
} }
}, },
_hitFunc: function(context) { _hitFunc: function(context) {
var anim = this.getAnimation(), var anim = this.getAnimation(),
index = this.getIndex(), index = this.frameIndex(),
f = this.getAnimations()[anim][index]; ix4 = index * 4,
set = this.getAnimations()[anim],
width = set[ix4 + 2],
height = set[ix4 + 3];
context.beginPath(); context.beginPath();
context.rect(0, 0, f.width, f.height); context.rect(0, 0, width, height);
context.closePath(); context.closePath();
context.fillShape(this); context.fillShape(this);
}, },
@ -141,17 +128,17 @@
clearInterval(this.interval); clearInterval(this.interval);
}, },
_updateIndex: function() { _updateIndex: function() {
var index = this.getIndex(), var index = this.frameIndex(),
animation = this.getAnimation(), animation = this.getAnimation(),
animations = this.getAnimations(), animations = this.getAnimations(),
anim = animations[animation], anim = animations[animation],
len = anim.length; len = anim.length / 4;
if(index < len - 1) { if(index < len - 1) {
this.setIndex(index + 1); this.frameIndex(index + 1);
} }
else { else {
this.setIndex(0); this.frameIndex(0);
} }
} }
}; };
@ -161,92 +148,106 @@
Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'animation'); Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'animation');
/** /**
* set animation key * get/set animation key
* @name setAnimation * @name animation
* @method * @method
* @memberof Kinetic.Sprite.prototype * @memberof Kinetic.Sprite.prototype
* @param {String} anim animation key * @param {String} anim animation key
*/
/**
* get animation key
* @name getAnimation
* @method
* @memberof Kinetic.Sprite.prototype
* @returns {String} * @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'); Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'animations');
/** /**
* set animations map * get/set animations map
* @name setAnimations * @name animations
* @method * @method
* @memberof Kinetic.Sprite.prototype * @memberof Kinetic.Sprite.prototype
* @param {Object} animations * @param {Object} animations
*/
/**
* get animations map
* @name getAnimations
* @method
* @memberof Kinetic.Sprite.prototype
* @returns {Object} * @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'); Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'image');
/** /**
* set image * get/set image
* @name setImage * @name image
* @method * @method
* @memberof Kinetic.Sprite.prototype * @memberof Kinetic.Sprite.prototype
* @param {Image} image * @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);
* get image
* @name getImage
* @method
* @memberof Kinetic.Sprite.prototype
* @returns {ImageObject}
*/
Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'index', 0);
/** /**
* set animation frame index * set/set animation frame index
* @name setIndex * @name frameIndex
* @method
* @memberof Kinetic.Sprite.prototype
* @param {Integer} index frame index
*/
/**
* get animation frame index
* @name getIndex
* @method * @method
* @memberof Kinetic.Sprite.prototype * @memberof Kinetic.Sprite.prototype
* @param {Integer} frameIndex
* @returns {Integer} * @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); Kinetic.Factory.addGetterSetter(Kinetic.Sprite, 'frameRate', 17);
/** /**
* set frame rate in frames / second. Default is 17 frames per second. Increase this number to make the sprite * 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 * animation run faster, and decrease the number to make the sprite animation run slower
* @name setFrameRate * The default is 17 frames per second
* @name frameRate
* @method * @method
* @memberof Kinetic.Sprite.prototype * @memberof Kinetic.Sprite.prototype
* @param {Integer} frameRate * @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);
*/ */
/**
* get frame rate
* @name getFrameRate
* @method
* @memberof Kinetic.Sprite.prototype
* @returns {Number}
*/
})(); })();

View File

@ -94,10 +94,10 @@
<script src="unit/filters/Sepia-test.js"></script> <script src="unit/filters/Sepia-test.js"></script>
<script src="unit/filters/Emboss-test.js"></script> <script src="unit/filters/Emboss-test.js"></script>
<script src="unit/filters/Solarize-test.js"></script> <script src="unit/filters/Solarize-test.js"></script>
<script src="unit/filters/Kaleidoscope-test.js"></script>
<!-- <!--
<script src="unit/filters/Ripple-test.js"></script> <script src="unit/filters/Ripple-test.js"></script>
<script src="unit/filters/Kaleidoscope-test.js"></script>
--> -->

View File

@ -798,88 +798,34 @@ suite('Node', function() {
var stage = addStage(); var stage = addStage();
var layer = new Kinetic.Layer(); var layer = new Kinetic.Layer();
var anims = { var sprite = new Kinetic.Sprite({
standing: [{
x: 0,
y: 0,
width: 49,
height: 109
}, {
x: 52,
y: 0,
width: 49,
height: 109
}, {
x: 105,
y: 0,
width: 49,
height: 109
}, {
x: 158,
y: 0,
width: 49,
height: 109
}, {
x: 210,
y: 0,
width: 49,
height: 109
}, {
x: 262,
y: 0,
width: 49,
height: 109
}],
kicking: [{
x: 0,
y: 109,
width: 45,
height: 98
}, {
x: 45,
y: 109,
width: 45,
height: 98
}, {
x: 95,
y: 109,
width: 63,
height: 98
}, {
x: 156,
y: 109,
width: 70,
height: 98
}, {
x: 229,
y: 109,
width: 60,
height: 98
}, {
x: 287,
y: 109,
width: 41,
height: 98
}]
};
//for(var n = 0; n < 50; n++) {
sprite = new Kinetic.Sprite({
//x: Math.random() * stage.getWidth() - 30,
x: 200, x: 200,
//y: Math.random() * stage.getHeight() - 50,
y: 50, y: 50,
image: imageObj, image: imageObj,
animation: 'standing', animation: 'standing',
animations: anims, animations: {
index: 0, standing: [
frameRate: Math.random() * 6 + 6, 0, 0, 49, 109,
52, 0, 49, 109,
105, 0, 49, 109,
158, 0, 49, 109,
210, 0, 49, 109,
262, 0, 49, 109
],
kicking: [
0, 109, 45, 98,
45, 109, 45, 98,
95, 109, 63, 98,
156, 109, 70, 98,
229, 109, 60, 98,
287, 109, 41, 98
]
},
frameRate: 10, frameRate: 10,
draggable: true, draggable: true,
shadowColor: 'black', shadowColor: 'black',
shadowBlur: 3, shadowBlur: 3,
shadowOffset: [3, 1], shadowOffset: {x: 3, y:1},
shadowOpacity: 0.3 shadowOpacity: 0.3
}); });
@ -958,39 +904,6 @@ suite('Node', function() {
showHit(layer); showHit(layer);
}); });
// ======================================================
test('node caching width minimal configuration', function(done) {
var stage = addStage();
var layer = new Kinetic.Layer();
stage.add(layer);
var rect = new Kinetic.Rect({
width : 50,
height : 50,
fill: 'green',
stroke: 'blue',
strokeWidth: 5,
draggable: true
});
rect.toImage({
callback: function(imageObj) {
assert.equal(Kinetic.Util._isElement(imageObj), true);
var cachedShape = new Kinetic.Image({
image: imageObj,
draggable: true,
stroke: 'red',
strokeWidth: 5
});
layer.add(cachedShape);
layer.draw();
done();
}
});
showHit(layer);
});
// ====================================================== // ======================================================
test('hide group', function() { test('hide group', function() {
var stage = addStage(); var stage = addStage();

View File

@ -6,87 +6,35 @@ suite('Sprite', function() {
var stage = addStage(); var stage = addStage();
var layer = new Kinetic.Layer(); var layer = new Kinetic.Layer();
var anims = {
standing: [{
x: 0,
y: 0,
width: 49,
height: 109
}, {
x: 52,
y: 0,
width: 49,
height: 109
}, {
x: 105,
y: 0,
width: 49,
height: 109
}, {
x: 158,
y: 0,
width: 49,
height: 109
}, {
x: 210,
y: 0,
width: 49,
height: 109
}, {
x: 262,
y: 0,
width: 49,
height: 109
}],
kicking: [{ var sprite = new Kinetic.Sprite({
x: 0,
y: 109,
width: 45,
height: 98
}, {
x: 45,
y: 109,
width: 45,
height: 98
}, {
x: 95,
y: 109,
width: 63,
height: 98
}, {
x: 156,
y: 109,
width: 70,
height: 98
}, {
x: 229,
y: 109,
width: 60,
height: 98
}, {
x: 287,
y: 109,
width: 41,
height: 98
}]
};
//for(var n = 0; n < 50; n++) {
sprite = new Kinetic.Sprite({
//x: Math.random() * stage.getWidth() - 30,
x: 200, x: 200,
//y: Math.random() * stage.getHeight() - 50,
y: 50, y: 50,
image: imageObj, image: imageObj,
animation: 'standing', animation: 'standing',
animations: anims, animations: {
frameRate: Math.random() * 6 + 6, standing: [
0, 0, 49, 109,
52, 0, 49, 109,
105, 0, 49, 109,
158, 0, 49, 109,
210, 0, 49, 109,
262, 0, 49, 109
],
kicking: [
0, 109, 45, 98,
45, 109, 45, 98,
95, 109, 63, 98,
156, 109, 70, 98,
229, 109, 60, 98,
287, 109, 41, 98
]
},
frameRate: 10, frameRate: 10,
draggable: true, draggable: true,
shadowColor: 'black', shadowColor: 'black',
shadowBlur: 3, shadowBlur: 3,
shadowOffset: [3, 1], shadowOffset: {x: 3, y:1},
shadowOpacity: 0.3 shadowOpacity: 0.3
}); });
@ -94,7 +42,7 @@ suite('Sprite', function() {
stage.add(layer); stage.add(layer);
assert.equal(sprite.getClassName(), 'Sprite'); assert.equal(sprite.getClassName(), 'Sprite');
assert.equal(sprite.getIndex(), 0); assert.equal(sprite.frameIndex(), 0);
showHit(layer); showHit(layer);