Changing delay times in anim8
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
Changing delay times in anim8
been looking through anim8 to see if its the kind of library I'm looking for, and I cant seem to find any functions to change the delay time of an animation after its been created, even though it mentioned that there might be in the read me. Is there a way to do this, if so, how?
Re: Changing delay times in anim8
24 hour bump.
- kikito
- Inner party member
- Posts: 3153
- Joined: Sat Oct 03, 2009 5:22 pm
- Location: Madrid, Spain
- Contact:
Re: Changing delay times in anim8
Please don't bump forum posts. It's not well perceived in this forum.
Why do you think you need to do that? What, exactly, are you trying to accomplish?Cowinatub wrote:Change the delay time of an animation after its been created
What part of the readme are you referring to? Maybe I'll need to edit it.Cowinatub wrote:even though it mentioned that there might be in the read me.
When I write def I mean function.
Re: Changing delay times in anim8
I was planning on having the animation speed up and slow down depending on how fast the player is moving. Sorry about bumping, It's just that I was starting to get pretty desperate for an answer as the project I'm working on has a deadline which is starting to get pretty soon.
- Jasoco
- Inner party member
- Posts: 3727
- Joined: Mon Jun 22, 2009 9:35 am
- Location: Pennsylvania, USA
- Contact:
Re: Changing delay times in anim8
To be fair he did wait 23.5 hours the first time. But I'd say rule of thumb is if your thread is still on the first page, don't bump it. Unless its been days and you have new information to add that just wouldn't work with your last post and you want people to know you added something. Not when you're bumping it just to beg people to answer your question. (Let alone twice in a short period of time. That's a no-no.)kikito wrote:Please don't bump forum posts. It's not well perceived in this forum.
Believe me, if someone has an answer, they'll post it. The forum is set up to let us know exactly what threads have posts we haven't seen yet, even if it was posted months ago. There have been times I've gone away and came back here to find threads with new posts all the way back 7 or 8 pages that I had to read through.
- kikito
- Inner party member
- Posts: 3153
- Joined: Sat Oct 03, 2009 5:22 pm
- Location: Madrid, Spain
- Contact:
Re: Changing delay times in anim8
I would have answered before, but I was kindof busy and on saturday the forums were offline (at least for me).
I knew several ways to do this, but I didn't know which one was better until I read Cowinatub's answer:
But there is a much better way of doing what you want, without having to go over each frame.
Let me explain: Chances are that you already have a "velocity" somewhere in your code. A number that says how fast the player/enemy/etc is moving. If you don't have a number (i.e. you have two numbers, one for vx and another for vy) you need want to get it somehow (i.e. only using vx and ignoring vy, or getting the length of the vector). Normally this velocity will come in pixels per second (px/s), although the units will not appear in your code. We can call this "self.velocity".
The next thing you need to determine is what velocity is the "standard" - the one in which the animation "looks good" by default, with no modifications. It should be a number: 20 px/s, 30 px/x, whatever. We can call this "animationVelocity"
Then you need to know "how fast you are moving with regards to the sandard velocity" at any given time. This is also a number. It will be 1 when velocity == animationVelocity. If velocity is twice as fast as the animation, it will be 2. And if it's half, it will be 0.5. In other words, this variable, which we can call velocityCoefficient, is self.velocity / animationVelocity.
Now here is the kick: Every time you update the animation, take the velocityCoefficient, and multiply it by dt before giving it to the animation.
So if before you had this:
Now you have this:
To simplify things up, I recommend you to set the same animationVelocity for all your animations. Otherwise, you will have to replace animationVelocity with self.animationVelocity, and update it every time you change animations.
I hope this helps, good luck with your project.
I knew several ways to do this, but I didn't know which one was better until I read Cowinatub's answer:
Cowinatub: There's a way to change the delays of each animation frame - each animation has an attribute called delays (animation.delays), which is just an array of durations. You could manipulate that array and change the speed of each frame however you wanted.Cowinatub wrote:I was planning on having the animation speed up and slow down depending on how fast the player is moving.
But there is a much better way of doing what you want, without having to go over each frame.
Let me explain: Chances are that you already have a "velocity" somewhere in your code. A number that says how fast the player/enemy/etc is moving. If you don't have a number (i.e. you have two numbers, one for vx and another for vy) you need want to get it somehow (i.e. only using vx and ignoring vy, or getting the length of the vector). Normally this velocity will come in pixels per second (px/s), although the units will not appear in your code. We can call this "self.velocity".
The next thing you need to determine is what velocity is the "standard" - the one in which the animation "looks good" by default, with no modifications. It should be a number: 20 px/s, 30 px/x, whatever. We can call this "animationVelocity"
Then you need to know "how fast you are moving with regards to the sandard velocity" at any given time. This is also a number. It will be 1 when velocity == animationVelocity. If velocity is twice as fast as the animation, it will be 2. And if it's half, it will be 0.5. In other words, this variable, which we can call velocityCoefficient, is self.velocity / animationVelocity.
Now here is the kick: Every time you update the animation, take the velocityCoefficient, and multiply it by dt before giving it to the animation.
So if before you had this:
Code: Select all
animation:update(dt) -- I do this for all velocities
Code: Select all
local animationVelocity = 30
...
local velocityCoefficient = self.velocity / animationVelocity
animation:update(dt * velocityCoefficient) -- I update faster/slower depending on my velocity
I hope this helps, good luck with your project.
When I write def I mean function.
Re: Changing delay times in anim8
Thanks for the help!
Who is online
Users browsing this forum: Bing [Bot] and 2 guests