Quellcode durchsuchen

Fixes crash when an AnimationClip is playing and game exits.
It is possible for an AnimationClip's member variable _isPlaying to be false and it also be in the AnimationController's running queue. Needed to search the running queue in AnimationController#unschedule() even if the AnimationClip was not playing.

Kieran Cunney vor 14 Jahren
Ursprung
Commit
71deec3749
1 geänderte Dateien mit 11 neuen und 4 gelöschten Zeilen
  1. 11 4
      gameplay/src/AnimationController.cpp

+ 11 - 4
gameplay/src/AnimationController.cpp

@@ -268,7 +268,7 @@ void AnimationController::initialize()
 
 void AnimationController::finalize()
 {
-    //stopAllAnimations();
+    stopAllAnimations();
     _state = PAUSED;
 }
 
@@ -308,10 +308,17 @@ void AnimationController::schedule(AnimationClip* clip)
 
 void AnimationController::unschedule(AnimationClip* clip)
 {
-    if (clip->_isPlaying)
+    std::list<AnimationClip*>::iterator clipItr = _runningClips.begin();
+    while (clipItr != _runningClips.end())
     {
-        _runningClips.remove(clip);
-        SAFE_RELEASE(clip);
+        AnimationClip* rClip = (*clipItr);
+        if (rClip == clip)
+        {
+            _runningClips.erase(clipItr);
+            SAFE_RELEASE(clip);
+            break;
+        }
+        clipItr++;
     }
 
     if (_runningClips.empty())