Calling play() on an AnimatedObject3d and then stop() results in the animated
object being paused, rather than reset to it's default stance. If you call the
Ogre 'run' action for example and then stop it half way through, the ogre is
paused mid-step.
The stop() function looks like it is attempting to reset the animation (i.e.
currentFrame = 0) but the vertices are never reset to match in the update
method because isPlaying is now false.
My (maybe crude) fix to this was to introduce a flag called 'isResetNeeded'.
This is set to true when stop is called. The update method then checks this
flag to see if it needs to reset the vertices.
So, in AnimationObject3d I have:
public void stop() {
isPlaying = false;
currentFrameIndex = 0;
isResetNeeded = true;
}
And:
public void update() {
if (isResetNeeded) {
KeyFrame currentFrame = frames[currentFrameIndex];
vertices().overwriteNormals(currentFrame.getNormals());
vertices().overwriteVerts(currentFrame.getVertices());
isResetNeeded = false;
return;
}
if (!isPlaying || !updateVertices) {
return;
}
// ... rest of update method exactly as before ...
}
Enjoy,
zonski
Original issue reported on code.google.com by zonski on 13 Dec 2010 at 11:17
Original issue reported on code.google.com by
zonski
on 13 Dec 2010 at 11:17