@@ -119,7 +119,7 @@ sp._regionAttachment_updateQuad = function(self, slot, quad, premultipliedAlpha)
119
119
120
120
sp . _meshAttachment_updateQuad = function ( self , slot , quad , premultipliedAlpha ) {
121
121
var vertices = { } ;
122
- self . computeVertices ( slot . bone . x , slot . bone . y , slot . bone , vertices ) ;
122
+ self . computeWorldVertices ( slot . bone . x , slot . bone . y , slot , vertices ) ;
123
123
var r = slot . bone . skeleton . r * slot . r * 255 ;
124
124
var g = slot . bone . skeleton . g * slot . g * 255 ;
125
125
var b = slot . bone . skeleton . b * slot . b * 255 ;
@@ -182,6 +182,25 @@ sp.ANIMATION_EVENT_TYPE = {
182
182
EVENT : 3
183
183
} ;
184
184
185
+ sp . TrackEntryListeners = function ( startListener , endListener , completeListener , eventListener ) {
186
+ this . startListener = startListener || null ;
187
+ this . endListener = endListener || null ;
188
+ this . completeListener = completeListener || null ;
189
+ this . eventListener = eventListener || null ;
190
+ } ;
191
+
192
+ sp . TrackEntryListeners . getListeners = function ( entry ) {
193
+ if ( ! entry . rendererObject ) {
194
+ entry . rendererObject = new sp . TrackEntryListeners ( ) ;
195
+ entry . listener = sp . trackEntryCallback ;
196
+ }
197
+ return entry . rendererObject ;
198
+ } ;
199
+
200
+ sp . trackEntryCallback = function ( state , trackIndex , type , event , loopCount ) {
201
+ state . rendererObject . onTrackEntryEvent ( trackIndex , type , event , loopCount ) ;
202
+ } ;
203
+
185
204
/**
186
205
* The skeleton animation of spine. It updates animation's state and skeleton's world transform.
187
206
* @class
@@ -195,12 +214,19 @@ sp.SkeletonAnimation = sp.Skeleton.extend(/** @lends sp.SkeletonAnimation# */{
195
214
_target : null ,
196
215
_callback : null ,
197
216
217
+ _ownsAnimationStateData : false ,
218
+ _startListener : null ,
219
+ _endListener : null ,
220
+ _completeListener : null ,
221
+ _eventListener : null ,
222
+
198
223
/**
199
224
* Initializes a sp.SkeletonAnimation. please do not call this function by yourself, you should pass the parameters to constructor to initialize it.
200
225
* @override
201
226
*/
202
227
init : function ( ) {
203
228
sp . Skeleton . prototype . init . call ( this ) ;
229
+ this . _ownsAnimationStateData = true ;
204
230
this . setAnimationStateData ( new spine . AnimationStateData ( this . _skeleton . data ) ) ;
205
231
} ,
206
232
@@ -210,6 +236,7 @@ sp.SkeletonAnimation = sp.Skeleton.extend(/** @lends sp.SkeletonAnimation# */{
210
236
*/
211
237
setAnimationStateData : function ( stateData ) {
212
238
var state = new spine . AnimationState ( stateData ) ;
239
+ state . rendererObject = this ;
213
240
state . onStart = this . _onAnimationStateStart . bind ( this ) ;
214
241
state . onComplete = this . _onAnimationStateComplete . bind ( this ) ;
215
242
state . onEnd = this . _onAnimationStateEnd . bind ( this ) ;
@@ -258,10 +285,11 @@ sp.SkeletonAnimation = sp.Skeleton.extend(/** @lends sp.SkeletonAnimation# */{
258
285
* @param {Number } trackIndex
259
286
* @param {String } name
260
287
* @param {Boolean } loop
261
- * @param {Number } delay
288
+ * @param {Number } [ delay=0]
262
289
* @returns {spine.TrackEntry|null }
263
290
*/
264
291
addAnimation : function ( trackIndex , name , loop , delay ) {
292
+ delay = delay == null ? 0 : delay ;
265
293
var animation = this . _skeleton . data . findAnimation ( name ) ;
266
294
if ( ! animation ) {
267
295
cc . log ( "Spine: Animation not found:" + name ) ;
@@ -302,13 +330,102 @@ sp.SkeletonAnimation = sp.Skeleton.extend(/** @lends sp.SkeletonAnimation# */{
302
330
*/
303
331
update : function ( dt ) {
304
332
this . _super ( dt ) ;
305
-
306
333
dt *= this . _timeScale ;
307
334
this . _state . update ( dt ) ;
308
335
this . _state . apply ( this . _skeleton ) ;
309
336
this . _skeleton . updateWorldTransform ( ) ;
310
337
} ,
311
338
339
+ /**
340
+ * Set the start event listener.
341
+ * @param {function } listener
342
+ */
343
+ setStartListener : function ( listener ) {
344
+ this . _startListener = listener ;
345
+ } ,
346
+
347
+ /**
348
+ * Set the end event listener.
349
+ * @param {function } listener
350
+ */
351
+ setEndListener : function ( listener ) {
352
+ this . _endListener = listener ;
353
+ } ,
354
+
355
+ setCompleteListener : function ( listener ) {
356
+ this . _completeListener = listener ;
357
+ } ,
358
+
359
+ setEventListener : function ( listener ) {
360
+ this . _eventListener = listener ;
361
+ } ,
362
+
363
+ setTrackStartListener : function ( entry , listener ) {
364
+ sp . TrackEntryListeners . getListeners ( entry ) . startListener = listener ;
365
+ } ,
366
+
367
+ setTrackEndListener : function ( entry , listener ) {
368
+ sp . TrackEntryListeners . getListeners ( entry ) . endListener = listener ;
369
+ } ,
370
+
371
+ setTrackCompleteListener : function ( entry , listener ) {
372
+ sp . TrackEntryListeners . getListeners ( entry ) . completeListener = listener ;
373
+ } ,
374
+
375
+ setTrackEventListener : function ( entry , listener ) {
376
+ sp . TrackEntryListeners . getListeners ( entry ) . eventListener = listener ;
377
+ } ,
378
+
379
+ onTrackEntryEvent : function ( traceIndex , type , event , loopCount ) {
380
+ var entry = this . _state . getCurrent ( traceIndex ) ;
381
+ if ( ! entry . rendererObject )
382
+ return ;
383
+ var listeners = entry . rendererObject ;
384
+ switch ( type ) {
385
+ case sp . ANIMATION_EVENT_TYPE . START :
386
+ if ( listeners . startListener )
387
+ listeners . startListener ( traceIndex ) ;
388
+ break ;
389
+ case sp . ANIMATION_EVENT_TYPE . END :
390
+ if ( listeners . endListener )
391
+ listeners . endListener ( traceIndex ) ;
392
+ break ;
393
+ case sp . ANIMATION_EVENT_TYPE . COMPLETE :
394
+ if ( listeners . completeListener )
395
+ listeners . completeListener ( traceIndex , loopCount ) ;
396
+ break ;
397
+ case sp . ANIMATION_EVENT_TYPE . EVENT :
398
+ if ( listeners . eventListener )
399
+ listeners . eventListener ( traceIndex , event ) ;
400
+ break ;
401
+ }
402
+ } ,
403
+
404
+ onAnimationStateEvent : function ( trackIndex , type , event , loopCount ) {
405
+ switch ( type ) {
406
+ case sp . ANIMATION_EVENT_TYPE . START :
407
+ if ( this . _startListener )
408
+ this . _startListener ( trackIndex ) ;
409
+ break ;
410
+ case sp . ANIMATION_EVENT_TYPE . END :
411
+ if ( this . _endListener )
412
+ this . _endListener ( trackIndex ) ;
413
+ break ;
414
+ case sp . ANIMATION_EVENT_TYPE . COMPLETE :
415
+ if ( this . _completeListener )
416
+ this . _completeListener ( trackIndex , loopCount ) ;
417
+ break ;
418
+ case sp . ANIMATION_EVENT_TYPE . EVENT :
419
+ if ( this . _eventListener )
420
+ this . _eventListener ( trackIndex , event ) ;
421
+ break ;
422
+ }
423
+ } ,
424
+
425
+ getState : function ( ) {
426
+ return this . _state ;
427
+ } ,
428
+
312
429
_onAnimationStateStart : function ( trackIndex ) {
313
430
this . _animationStateCallback ( trackIndex , sp . ANIMATION_EVENT_TYPE . START , null , 0 ) ;
314
431
} ,
@@ -322,6 +439,7 @@ sp.SkeletonAnimation = sp.Skeleton.extend(/** @lends sp.SkeletonAnimation# */{
322
439
this . _animationStateCallback ( trackIndex , sp . ANIMATION_EVENT_TYPE . EVENT , event , 0 ) ;
323
440
} ,
324
441
_animationStateCallback : function ( trackIndex , type , event , loopCount ) {
442
+ this . onAnimationStateEvent ( trackIndex , type , event , loopCount ) ;
325
443
if ( this . _target && this . _callback ) {
326
444
this . _callback . call ( this . _target , this , trackIndex , type , event , loopCount )
327
445
}
0 commit comments