- Home /
Hot to solve iTween "cooldown"?
Hello,
I use(well, I want to use, because now it's unusable) iTween for my gameplay. I want to rotate object using iTween RotateBy.
It rotates object quite good, if iTween is called with some bigger interval of time.
The problem is when I try to use iTween more than once in the same direction and with a small interval. It completes the 1st rotation, but each second rotation doesn't happen, object jumps(movedirection.y=jumpspeed/2) one time without rotation. After this jump, if the button is still being pressed, iTween does its job and object rotates for the second time. It seems like there's some kind of cooldown to call the same iTween repeatedly.
This problem is only if I try to use iTween more than once in the same direction. If I keep pressing left>right>left>right e.t.c., all rotations work great, no jumps without rotation, no lag, no "cooldown".
If I set a smaller(very small) float time for iTween, "cooldown" can be bypassed, but in game it looks just very silly that this rotation happens momentarily. iTween most likely cant't be called, before previous iTween isn't completed. But it doesn't explain why iTween in other direction works great even with bigger float time.
Why is that so and how can I evade it?
I think that there's some kind of lag on end of the iTween, I can see it while playing. When rotation is done, object stands in the same place for a small amount of time and only then oncomplete function is called.
Part of the code:
Hashtable rot_left = new Hashtable();
Hashtable rot_right = new Hashtable();
void Awake()
{
controllers = GetComponent<CharacterController>();
rot_left.Add("z", 0.0833333);
rot_left.Add("Time",rotatespeed);
rot_left.Add("oncompletetarget", gameObject);
rot_left.Add("oncompleteparams", "left");
rot_left.Add("oncomplete", "rotate");
rot_right.Add("z",-0.0833333);
rot_right.Add("Time",rotatespeed);
rot_right.Add("oncompletetarget", gameObject);
rot_right.Add("oncompleteparams", "right");
rot_right.Add("oncomplete", "rotate");
}
void Update()
{
if (controllers.isGrounded)
{
if(right_p.GetComponent<buttons>().ispressed)
{
iTween.RotateBy(worldobj, rot_right);
animation.Play ("right", PlayMode.StopAll);
moveDirection.y = jumpSpeed/2;
}
else if(left_p.GetComponent<buttons>().ispressed)
{
iTween.RotateBy(worldobj, rot_left);
animation.Play ("left", PlayMode.StopAll);
moveDirection.y = jumpSpeed/2;
}
}
}
Your answer