сброс, Tweener, AS3 - PullRequest
       15

сброс, Tweener, AS3

0 голосов
/ 17 марта 2010

Как мне сбросить мои номера после их подсчета? Я хочу что-то вроде функции onComplete.

ОПИСАНИЕ
Моя анимация продвигается на 120 пикселей от текущей позиции, а затем улетает со сцены. Это было зацикливание, и перед тем, как продвигаться, вы дойдете до дна. Я не хочу мои номера йойо или лететь со сцены. Мои числа должны сдвинуться на 120 пикселей вперед на каждый отсчет, затем вернуться.

альтернативный текст http://www.ashcraftband.com/myspace/videodnd/tweener___.jpg

NumbersView.as 'код работает, но не так, как описано'

package   
{ 
    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.utils.Dictionary; 
    import flash.events.Event; 
    import caurina.transitions.Tweener; 

    public class NumbersView extends MovieClip 
    { 
        private var _listItems:Array; 
        private var previousNums:Array; 
        private const numHeight:int = 120; 

        public function NumbersView()  
        { 
            _listItems = new Array(); 
            previousNums = new Array(); 
   //Tweener.init();

            var item:NumberImage; 
            for (var i:Number = 0; i < 9; i++) { 
                item = new NumberImage(); 
                addChild(item); 
                item.x = i * item.width; 
                _listItems.push(item); 
            } 
        } 

        public function setTime($number:String):void { 
            var nums:Array = $number.split(""); 
            //trace("$number = " + $number);
            for (var i:Number = 0; i < nums.length; i++) { 
                if (nums[i] == previousNums[i]) continue; 
                Tweener.removeTweens(_listItems[i]);    

                //newY:int = -numHeight;
    var newY:int = int(nums[i]) * -numHeight;
    trace("newY = " + newY);
                trace("currY = " + _listItems[i].y);

    /*----------------------PROBLEM AREA, RIGHT HERE------------------------*/
                //if (_listItems[i].y < 0) _listItems[i].y = numHeight;//
                //Tweener.addTween(_listItems[i], { y:newY, time:3 } );//
    Tweener.addTween(_listItems[i], { y:_listItems[i].y+newY, time:3 } );//
            } 
            previousNums = nums; 
        } 
    } 
} 

Пример Tweener
http://hosted.zeh.com.br/tweener/docs/en-us/parameters/onComplete.html

** oopse!
// crap code было замечание не использовать его, а не комментарий против чьего-либо кода


КЛАСС ДОКУМЕНТА
Параметры публикации / Flash / Настройки «Расширенные настройки ActionScript 3.0» / Класс документа: NumbersView

КЛАСС Символ 70x1080, номера 70x120
Библиотека / Свойства "щелчка правой кнопкой мыши" / Класс: NumberImage

Ответы [ 2 ]

0 голосов
/ 17 марта 2010

Мне понадобилось немного времени, чтобы понять, что вы действительно пытаетесь получить в качестве конечного результата, но я думаю, что понял. Я разделил эту функциональность на 2 класса. Класс NumbersView по-прежнему является классом документа, но я также создал класс NumberImage, который вы можете прикрепить к своему мувиклипу с номерами от 0 до 9 в своей библиотеке. Вот код:

//NumbersView.as - Your Document Class
package {

    import flash.display.MovieClip;

    public class NumbersView extends MovieClip {

        private var _listItems:Array; 
        private const numHeight:int = 120; 

        public function NumbersView()  
        { 
            _listItems = new Array();

            var item:NumberImage; 
            for (var i:Number = 0; i < 9; i++) { 
                item = new NumberImage(); 
                addChild(item); 
                item.x = i * item.width; 
                _listItems.push(item); 
            }

            setTime('123456789');

        }

        public function setTime($number:String):void { 
            var nums:Array = $number.split(""); 
            trace(nums);

            for (var i:Number = 0; i < nums.length; i++) { 

                _listItems[i].start( int(nums[i]) );

            } 

        } 


    }
}

Следующим классом является класс NumberImage.as, который можно подключить к своему мувиклипу, щелкнув правой кнопкой мыши элемент в библиотеке «Свойства ...», отметив «Экспорт для ActionScript» и вставив NumberImage для Имя класса.

//NumberImage.as - Linked to the NumberImage movieclip in the Library    
package {

    import flash.display.MovieClip;
    import caurina.transitions.Tweener;

    public class NumberImage extends MovieClip {

        public var count:int;

        public function NumberImage() {
            count = 0;
        }

        public function start( num:int = 0 ):void {
            this.y = -120*num;
            count = num;
            moveNumbers();
        }

        public function moveNumbers():void {
            count++;
            if(count % 10 == 0) {
                Tweener.addTween( this, {y: this.y + 1080, time:1, onComplete:moveNumbers});
            } else {
                Tweener.addTween( this, {y: this.y - 120, time:1, onComplete:moveNumbers});
            }
        }

    }
}

Надеюсь, это имеет больше смысла, и теперь легче расшифровать, поскольку функциональные возможности объектов NumberImage обрабатываются сами по себе, а не с помощью содержащего их класса.

0 голосов
/ 17 марта 2010

Самое логичное решение, которое я могу придумать из головы, состоит в том, чтобы расширить изображение, содержащее все ваши числа, так, чтобы оно имело 9 на каждом конце, то есть: после 8 на верхнем конце 9 изображение, но перед 0 также есть 9, внизу изображения.

Тогда вам просто нужно сделать несколько тестов, чтобы выяснить, на каких позициях на сцене будет находиться ваше изображение в каждой точке его цикла. Вам нужно знать положение, в котором оно будет отображаться при отображении или из 9-ти, на любом конце изображения. Затем вы просто вставляете оператор if, чтобы проверить, когда объект достигает позиции, что означает, что он отображает самые верхние 9, а когда это равно true, сделайте положение изображения равным самому нижнему 9. Когда вы сделаете это изменение , не используйте Tweener, так как вы хотите, чтобы он привязывался к остальным 9 позициям в одном кадре, чтобы зритель не знал об этом.

Надеюсь, ты понимаешь, что я говорю. Ваш код сбивает меня с толку, поэтому я не совсем уверен (не тратя слишком много времени на попытки понять его), куда вы ввели бы эту логику, но я предполагаю, что вы знаете.

...