Adventure Game Studio

AGS Support => Beginners' Technical Questions => Topic started by: Doctor Oakroot on Wed 19/09/2007 22:21:16

Title: Stopping character animation?
Post by: Doctor Oakroot on Wed 19/09/2007 22:21:16
Is there a direct way to stop a repeating animation for a character? Apparently StopAnimating only works for objects.

I found that changing the view stops the animation, but I was trying to stop the animation while staying in the same view. I ended up changing the view to a different view and then immediately changing it back - that worked but seems clumsy.

Just changing the Loop caused the animation to continue in the new Loop (which was very funny to watch, but not what I was after, lol)
Title: Re: Stopping character animation?
Post by: Khris on Wed 19/09/2007 22:35:23
Try Character.StopMoving();
Title: Re: Stopping character animation?
Post by: Doctor Oakroot on Thu 20/09/2007 01:07:47
Yeah, I tried that... no effect. I'm guessing StopMoving stops Walk... but in this case the character is standing in one place but animated.
Title: Re: Stopping character animation?
Post by: Ashen on Thu 20/09/2007 01:33:28
Moving the character stops animations, so Character.Walk (non-blocking) followed by Character.StopMoving should stop the animation (and because it was a non-blocking movement, they won't actually appear to move). I'm not sure that it's any less clunky than two View changes, though.

What exactly are you trying to do? A neater way may be to make the animation run using the Character's Idle view, with a delay of 0 (as suggested in the BFAQ). Changing the delay to something longer will stop the anim when you're done with it.
Title: Re: Stopping character animation?
Post by: Doctor Oakroot on Thu 20/09/2007 02:15:07
The character is playing a guitar until the guitar music ends (the guitar music is played once with repeating background music queued after it).

Sounds like the Walk/StopMoving or the idleview thing would also work, but nothing as direct as StopAnimating.

I need to read up on controlling the idle view.

Thanks for some good ideas.
Title: Re: Stopping character animation?
Post by: Charity on Thu 20/09/2007 20:30:26
What about putting the somewhat clunky code in its own function, like this?

For 2.8:
function StopCAnimating(this Character*) {
  int currentview = this.View;
  this.LockView(0);
  this.LockView(currentview);
}

For 2.72:
function StopCharacterAnimating(int chara) {
  int currentview = character[chara].View;
  character[chara].LockView(0);
  character[chara].LockView(currentview);
}


It's still the same solution, but at least you don't have to keep typing/pasting it if you're going to be using it a lot, and it will look neater in your script.  But perhaps I am a little function happy.
Title: Re: Stopping character animation?
Post by: Ashen on Thu 20/09/2007 20:49:08
I'm as function happy as te next person, but I'm not sure that function is the way to go - you don't usually want to call LockView without calling UnlockView at some point (LockView != ChangeView, remember), and 0 is an invalid view, so it'll cause a crash.

On further testing, a single ChangeView will actually do the job - just change it to the character's current view, e.g. (2.72 version):

function StopCharAnim(Character *theChar) {
  theChar.ChangeView(theChar.View);
}


EDIT:
Having the character speak will also stop any animation from running - throw in a 'Thank you. Thank you very much.' at the end of the song and you're OK :)
Title: Re: Stopping character animation?
Post by: Charity on Thu 20/09/2007 22:08:46
Ah!  LockView didn't look right to me either, but I got scared off from ChangeView by the disclaimer.  Good to know.
Title: Re: Stopping character animation?
Post by: Doctor Oakroot on Thu 20/09/2007 23:28:38
Ah, I never tried changing to the current view. That's a pretty good solution.

I like the Say solution too.