Skip to content

Commit 67ed799

Browse files
committed
Merge remote-tracking branch 'origin/dev'
2 parents 4fb70ad + 21cdc17 commit 67ed799

File tree

11 files changed

+352
-299
lines changed

11 files changed

+352
-299
lines changed

src/dragonBones/animation/Animation.as

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
public static const SAME_LAYER:String = "sameLayer";
2020
public static const SAME_GROUP:String = "sameGroup";
2121
public static const SAME_LAYER_AND_GROUP:String = "sameLayerAndGroup";
22-
public static const ALL:String = "all";
22+
public static const ALL:String = "all";
2323

2424
/**
2525
* Unrecommended API. Recommend use animationList.
@@ -238,7 +238,6 @@
238238
{
239239
return null;
240240
}
241-
242241
_isPlaying = true;
243242
_isFading = true;
244243

@@ -251,13 +250,12 @@
251250
}
252251
else
253252
{
254-
durationScale = duration / animationData.duration;
253+
durationScale = duration * 0.001 / animationData.duration;
255254
}
256255

257256
playTimes = isNaN(playTimes)?animationData.playTimes:playTimes;
258257

259258
var animationState:AnimationState;
260-
var j:int;
261259
switch(fadeOutMode)
262260
{
263261
case NONE:

src/dragonBones/animation/AnimationState.as

Lines changed: 77 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,14 @@
115115
}
116116

117117
private var _armature:Armature;
118-
private var _currentFrame:Frame;
119118
private var _timelineStateList:Vector.<TimelineState>;
120119
private var _mixingTransforms:Object;
121120

122121
private var _isPlaying:Boolean;
123-
private var _time:Number;
122+
private var _time:int;
123+
private var _currentFrameIndex:int;
124+
private var _currentFramePosition:int;
125+
private var _currentFrameDuration:int;
124126

125127
private var _pausePlayheadInFade:Boolean;
126128
private var _isFadeOut:Boolean;
@@ -192,30 +194,30 @@
192194
return _currentPlayTimes;
193195
}
194196

195-
private var _totalTime:Number;
197+
private var _totalTime:int;
196198
/**
197199
* The length of the animation clip in seconds.
198200
*/
199201
public function get totalTime():Number
200202
{
201-
return _totalTime;
203+
return _totalTime * 0.001;
202204
}
203205

204-
private var _currentTime:Number;
206+
private var _currentTime:int;
205207
/**
206208
* The current time of the animation.
207209
*/
208210
public function get currentTime():Number
209211
{
210-
return _currentTime;
212+
return _currentTime * 0.001;
211213
}
212214
public function setCurrentTime(value:Number):AnimationState
213215
{
214216
if(isNaN(value))
215217
{
216218
value = 0;
217219
}
218-
_currentTime = value;
220+
_currentTime = value * 1000;
219221
_time = _currentTime;
220222
return this;
221223
}
@@ -266,13 +268,12 @@
266268
}
267269
public function setPlayTimes(value:int):AnimationState
268270
{
269-
if(Math.round(_totalTime * _clip.frameRate) < 2)
271+
if(Math.round(_totalTime * 0.001 * _clip.frameRate) < 2)
270272
{
271273
_playTimes = value < 0?-1:1;
272274
}
273275
else
274276
{
275-
_timeScale = timeScale;
276277
_playTimes = value < 0?-value:value;
277278
}
278279
autoFadeOut = value < 0?true:false;
@@ -300,14 +301,14 @@
300301
autoTween = _clip.autoTween;
301302

302303
//clear
303-
_currentFrame = null;
304+
_currentFrameIndex = -1;
304305
_mixingTransforms = null;
305306

306307
//reset
307308
_isComplete = false;
308309
_time = 0;
309310
_currentPlayTimes = 0;
310-
if(Math.round(_totalTime * _clip.frameRate) < 2 || timeScale == Infinity)
311+
if(Math.round(_totalTime * 0.001 * _clip.frameRate) < 2 || timeScale == Infinity)
311312
{
312313
_currentTime = _totalTime;
313314
}
@@ -646,7 +647,7 @@
646647
fadeStartFlg = true;
647648
}
648649

649-
//(_fadeState == -1 || _fadeState == 0) && fadeState == -1
650+
//(_fadeState == -1 || _fadeState == 0) && fadeState == 1
650651
if(fadeState == 1)
651652
{
652653
fadeCompleteFlg = true;
@@ -708,19 +709,31 @@
708709
{
709710
if(_isPlaying && !_pausePlayheadInFade)
710711
{
711-
_time += passedTime;
712+
_time += passedTime * 1000;
712713
}
713714

714715
var startFlg:Boolean = false;
715716
var completeFlg:Boolean = false;
716717
var loopCompleteFlg:Boolean = false;
717718

718-
var currentTime:Number = _time;
719+
var currentTime:int = _time;
719720
var currentPlayTimes:int;
720721
var isThisComplete:Boolean;
721-
if(_playTimes != 0)
722+
if(_playTimes == 0)
722723
{
723-
var totalTimes:Number = _playTimes * _totalTime;
724+
isThisComplete = false;
725+
currentPlayTimes = Math.ceil(Math.abs(currentTime) / _totalTime) || 1;
726+
//currentTime -= Math.floor(currentTime / _totalTime) * _totalTime;
727+
currentTime -= int(currentTime / _totalTime) * _totalTime;
728+
729+
if(currentTime < 0)
730+
{
731+
currentTime += _totalTime;
732+
}
733+
}
734+
else
735+
{
736+
var totalTimes:int = _playTimes * _totalTime;
724737
if(currentTime >= totalTimes)
725738
{
726739
currentTime = totalTimes;
@@ -741,27 +754,15 @@
741754
currentTime += totalTimes;
742755
}
743756

744-
currentPlayTimes = Math.ceil(currentTime/_totalTime) || 1;
745-
//currentTime -= Math.floor(currentTime/_totalTime) * _totalTime;
746-
currentTime -= int(currentTime/_totalTime) * _totalTime;
757+
currentPlayTimes = Math.ceil(currentTime / _totalTime) || 1;
758+
//currentTime -= Math.floor(currentTime / _totalTime) * _totalTime;
759+
currentTime -= int(currentTime / _totalTime) * _totalTime;
747760

748761
if(isThisComplete)
749762
{
750763
currentTime = _totalTime;
751764
}
752765
}
753-
else
754-
{
755-
isThisComplete = false;
756-
currentPlayTimes = Math.ceil(Math.abs(currentTime)/_totalTime) || 1;
757-
//currentTime -= Math.floor(currentTime/_totalTime) * _totalTime;
758-
currentTime -= int(currentTime/_totalTime) * _totalTime;
759-
760-
if(currentTime < 0)
761-
{
762-
currentTime += _totalTime;
763-
}
764-
}
765766

766767
//update timeline
767768
_isComplete = isThisComplete;
@@ -795,13 +796,14 @@
795796
}
796797

797798
_currentTime = currentTime;
798-
799+
/*
799800
if(isThisComplete)
800801
{
801802
currentTime = _totalTime * 0.999999;
802803
}
803804
//[0, _totalTime)
804-
updateMainTimeline(currentTime);
805+
*/
806+
updateMainTimeline(isThisComplete);
805807
}
806808

807809
var event:AnimationEvent;
@@ -839,54 +841,71 @@
839841
}
840842
}
841843

842-
private function updateMainTimeline(currentTime:Number):void
844+
private function updateMainTimeline(isThisComplete:Boolean):void
843845
{
844846
var frameList:Vector.<Frame> = _clip.frameList;
845847
if(frameList.length > 0)
846848
{
847-
var isArrivedAtNewFrame:Boolean = false;
848-
var frameIndex:int = 0;
849-
while(!_currentFrame || currentTime > _currentFrame.position + _currentFrame.duration || currentTime < _currentFrame.position)
849+
var prevFrame:Frame;
850+
var currentFrame:Frame;
851+
while(true)
850852
{
851-
if(isArrivedAtNewFrame)
853+
if(_currentFrameIndex < 0)
852854
{
853-
_armature.arriveAtFrame(_currentFrame, null, this, true);
855+
_currentFrameIndex = 0;
856+
currentFrame = frameList[_currentFrameIndex];
854857
}
855-
if(_currentFrame)
858+
else if(_currentTime >= _currentFramePosition + _currentFrameDuration)
856859
{
857-
frameIndex = frameList.indexOf(_currentFrame);
858-
frameIndex ++;
859-
if(frameIndex >= frameList.length)
860+
_currentFrameIndex ++;
861+
if(_currentFrameIndex >= frameList.length)
860862
{
861-
frameIndex = 0;
863+
if(isThisComplete)
864+
{
865+
_currentFrameIndex --;
866+
break;
867+
}
868+
else
869+
{
870+
_currentFrameIndex = 0;
871+
}
862872
}
863-
_currentFrame = frameList[frameIndex];
873+
currentFrame = frameList[_currentFrameIndex];
864874
}
865-
else
866-
{
867-
_currentFrame = frameList[0];
868-
}
869-
if(_currentFrame)
875+
else if(_currentTime < _currentFramePosition)
870876
{
871-
isArrivedAtNewFrame = true;
877+
_currentFrameIndex --;
878+
if(_currentFrameIndex < 0)
879+
{
880+
_currentFrameIndex = frameList.length - 1;
881+
}
882+
currentFrame = frameList[_currentFrameIndex];
872883
}
873884
else
874885
{
875-
isArrivedAtNewFrame = false;
876886
break;
877887
}
888+
889+
if(prevFrame)
890+
{
891+
_armature.arriveAtFrame(prevFrame, null, this, true);
892+
}
893+
894+
_currentFrameDuration = currentFrame.duration;
895+
_currentFramePosition = currentFrame.position;
896+
prevFrame = currentFrame;
878897
}
879898

880-
if(isArrivedAtNewFrame)
899+
if(currentFrame)
881900
{
882-
_armature.arriveAtFrame(_currentFrame, null, this, false);
901+
_armature.arriveAtFrame(currentFrame, null, this, false);
883902
}
884903
}
885904
}
886905

887906
private function hideBones():void
888907
{
889-
for(var timelineName:String in _clip.hideTimelineNameMap)
908+
for each(var timelineName:String in _clip.hideTimelineNameMap)
890909
{
891910
var bone:Bone = _armature.getBone(timelineName);
892911
if(bone)
@@ -898,15 +917,14 @@
898917

899918
private function clear():void
900919
{
901-
902-
for each(var timelineState:TimelineState in _timelineStateList)
920+
var i:int = _timelineStateList.length;
921+
while(i --)
903922
{
904-
TimelineState.returnObject(timelineState);
923+
removeTimelineState(_timelineStateList[i]);
905924
}
906925
_timelineStateList.length = 0;
907926

908927
_armature = null;
909-
_currentFrame = null;
910928
_clip = null;
911929
_mixingTransforms = null;
912930
}

0 commit comments

Comments
 (0)