You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Justin Mclean (JIRA)" <ji...@apache.org> on 2013/06/24 11:46:20 UTC

[jira] [Resolved] (FLEX-14454) stop function of Tween object does not working properly

     [ https://issues.apache.org/jira/browse/FLEX-14454?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Justin Mclean resolved FLEX-14454.
----------------------------------

       Resolution: Fixed
    Fix Version/s: Apache Flex 4.10.0

Fixed issue in 4.10 develop branch. Re-raise any enhancements as new JIRA issues if still required.
                
> stop function of Tween object does not working properly
> -------------------------------------------------------
>
>                 Key: FLEX-14454
>                 URL: https://issues.apache.org/jira/browse/FLEX-14454
>             Project: Apache Flex
>          Issue Type: Bug
>          Components: Effects
>    Affects Versions: Adobe Flex SDK 3.0 (Release)
>         Environment: Affected OS(s): All OS Platforms
> Affected OS(s): All OS Platforms
> Browser: Internet Explorer 7.x
> Language Found: English
>            Reporter: Adobe JIRA
>             Fix For: Apache Flex 4.10.0
>
>
> Steps to reproduce:
> 1. Define any custom object (say CustomObject) with property (say tweener) of type Tween which is created in constructor.
> public class CustomObject  {
> 	private var tweener: TweenEx;
> 	public function CustomObject() {
> 		tweener = new Tween (this, 0, 1, 1000, -1, tweenerUpdate, tweenerEnd);
> 	}
> 2. Create instance of CustomObject which creates Tween abject and animation is started.
> var customObject1 = new CustomObject();
> 3. While running the tweener from first custom object create another custom object.
> 4. When first custom object finished its animation but second one still running call stop() method of Tween object of first custom class.
>  
>  Actual Results:
> The Tween object from second custom object will be stoped.
>  
>   Expected Results:
> Nothing should happen.
>  
>  
>  Workaround (if any): - 
> I have checked source code for Tween object and found the reason. Also I found one more minor bug while checking source.
> The problem is when we creating new Tween it is automatically added to the activeTweens static array. The ID of the tween is index in the array. 
> So when I created customObject1 which creates Tween object let say tween1 that object has ID = 0 and pushed to the array.
> Then I created customObject2 which creates tween2 with ID=1 and also pushed to the activeTweens array.
> Next when tween1 is fineshed it automaticaly removed from the array and indexes of existing tweens recalculated. So at that moment we have tween2 in the array with ID=0. But we still have tween1 instantiated and tween1 also have ID=0. So now if I call stop for tween1 then Tween class will stop tween2 object.
> The simplest solution is just to set ID to -1 or so to unbind the tween from the array during removing it like that:
>     private static function removeTweenAt(index:int):void
>     {
>         if (index >= activeTweens.length || index < 0)
>             return;
>         Tween(activeTweens[index]).id = -1;
>  
>  
> About another bug:
> in the private static function timerHandler(event:TimerEvent):void you can see:
>         var n:int = activeTweens.length;
>         for (var i:int = n; i >= 0; i--)
> but should be 
>         var n:int = activeTweens.length;
>         for (var i:int = n-1; i >= 0; i--)
> Also I would recomend to extend it a bit like:
> add a new property to the constructor like startWhenCreated: Boolean = true. then it is possible to create Tween object but do not start it automatically.
> add a new property to the constructor like startFunction: Function
> extend resume() function in such way that if Tween is fineshed and then resume() is called the tween object again pushed to the array and tween makes reverse and continue working. then it is simple to do infinite animations to both ways. Also direction attribute would be nice to have as public property (read only is enaugh). 
> Also may be make sense to have attribute like autoreverse.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira