Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   повторение функции не с исходного значения (http://www.flasher.ru/forum/showthread.php?t=133328)

lissa81 02.12.2009 15:20

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

но есть еще вопрос

как доработать код чтобы после завершения функции public function cfline(e:TimerEvent) { ... } ее повторение начиналось не с исходного числа public var balanceXMLS:String="85390"; а продолжало дальше прибавлять +1

Код:

package {
        import flash.display.*;
        import flash.events.*;
        import fl.transitions.Tween;
        import fl.transitions.TweenEvent;
        import fl.transitions.easing.*;
        import flash.utils.Timer;
        import flash.events.TimerEvent;

public class counter extends MovieClip {
        public var i:int;
        public var str=String;

        public var balanceXMLS:String="85390";

        public function Init()
        {
                var timer:Timer = new Timer (5000);
                timer.addEventListener(TimerEvent.TIMER, cfline);
                timer.start();
        }

    public function cfline(e:TimerEvent)
        {
                str=String(Number(balanceXMLS)+1);
                trace(str);

                for (i = 0; i < 5; i++)
                {
                        var ww = str.charAt(i);
                        if(i == 0)
                                {var my1Tween:Tween = new Tween(count.cfline_tw1,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);}
                        else if(i == 1)
                                {var my2Tween:Tween = new Tween(count.cfline_tw2,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);}
                        else if(i == 2)
                                {var my3Tween:Tween = new Tween(count.cfline_tw3,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);}
                        else if(i == 3)
                                {var my4Tween:Tween = new Tween(count.cfline_tw4,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);}
                        else if(i == 4)
                                {var my5Tween:Tween = new Tween(count.cfline_tw5,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);}
                }
    }
}}


SamFR 02.12.2009 15:37

1) Зачем вам i в членах класса? Она используется только в cfline, вот туда её и перенесите.
2) Зачем вы числа храните в виде строк? Почему бы их не хранить в виде чисел?)

Код AS3:

public class counter extends MovieClip {
 
        public var str:String;
        public var balanceXMLN:String=85390;
 
        public function Init()
        {
                var timer:Timer = new Timer (5000);
                timer.addEventListener(TimerEvent.TIMER, cfline);
                timer.start();
        }
 
        public function cfline(e:TimerEvent)
        {
                balanceXMLN++;
                str=String(balanceXMLN);
                trace("Balance now: " + str);
 
                for (var i:int = 0; i < 5; i++)
                {
                        var ww:String = str.charAt(i);
                        if(i == 0) var my1Tween:Tween = new Tween(count.cfline_tw1,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);
                        else if(i == 1) var my2Tween:Tween = new Tween(count.cfline_tw2,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);
                        else if(i == 2) var my3Tween:Tween = new Tween(count.cfline_tw3,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);
                        else if(i == 3) var my4Tween:Tween = new Tween(count.cfline_tw4,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);
                        else var my5Tween:Tween = new Tween(count.cfline_tw5,"y", None.easeNone, 10, -40*(9-1-ww)-800, 0.9, true);
                }
    }
}

И да, называть переменную str – к беде :) Через месяц вы не сможете вспомнить, что же за строка такая в ней хранилась.

lissa81 02.12.2009 15:44

спасибо за советы я их учту в последующих работах.

но сейчас выдается ошибки
1184: Несовместимое значение по умолчанию типа int; ожидается String.
1067: Неявное приведение значения типа String к несоответствующему типу Number.

я не знаю что это и как это исправлять ((
может вас не затруднит объяснить что это и как исправить

SamFR 02.12.2009 15:49

Ещё я не смог понять логику работы метода cfline. Наверное, что-то очень хитрое... Действительно: мы берём какое-то число и увеличиваем его на 1. Далее превращаем его в строку. Далее в цикле (!) создаём черыре локальных переменных и назначаем им твины, причём один из числовых параметров вычисляем как сложное авифметическое выражение, включающее в себя вычитание строки из числа. Далее этими переменными не пользуемся, так что они исчезнут после окончания работы метода.

Если не обращать внимание не вычитание строки (хотя на такое сложно не обращать внимания =), то метод можно абсолютно безболезненно переписать так:

Код AS3:

public function cfline(e:TimerEvent)
        {
                balanceXMLN++;
                str=String(balanceXMLN);
                trace("Balance now: " + str);
 
                var my1Tween:Tween = new Tween(count.cfline_tw1,"y", None.easeNone, 10, -40*(9-1-str.charAt(0))-800, 0.9, true);
                var my2Tween:Tween = new Tween(count.cfline_tw2,"y", None.easeNone, 10, -40*(9-1-str.charAt(1))-800, 0.9, true);
                var my3Tween:Tween = new Tween(count.cfline_tw3,"y", None.easeNone, 10, -40*(9-1-str.charAt(2))-800, 0.9, true);
                var my4Tween:Tween = new Tween(count.cfline_tw4,"y", None.easeNone, 10, -40*(9-1-str.charAt(3))-800, 0.9, true);
                var my5Tween:Tween = new Tween(count.cfline_tw5,"y", None.easeNone, 10, -40*(9-1-str.charAt(4))-800, 0.9, true);
        }

Только учтите, что, как только метод cfline() отработает, все эти переменные myNTween станут недоступны.

Добавлено через 2 минуты
Цитата:

Сообщение от lissa81 (Сообщение 869753)
но сейчас выдается ошибки
1184: Несовместимое значение по умолчанию типа int; ожидается String.
1067: Неявное приведение значения типа String к несоответствующему типу Number.

я не знаю что это и как это исправлять ((
может вас не затруднит объяснить что это и как исправить

Это как раз-таки по той причине, что вы вычитаете строку из числа. Как вы дкмаете, чему будет равно 10 – "пампарам"? Вот и флеш не знает :)

lissa81 02.12.2009 15:58

м
 
Вложений: 1
идея была в том что при получение числа начинают прокручиваться цифры и при каждом новом прокручивание они увеличиваются на 1

но я не смогла это реализовать другим способом кроме того что вы видите

SamFR 02.12.2009 16:20

"Прокручивание цифр", если я правильно понял, осуществляется тут:
Код AS3:

balanceXMLN++;

А зачем вы потом превращаете это число в строку и вычитаете отдельные её символы из какого-то числа?

lissa81 02.12.2009 16:24

изначально было что число приходило с сервера. потом это убралось и осталось просто одно число к которому нужно при каждой прокрутки +1.

и в итоге я настолько запуталась что совсем не понимаю что нужно делать чтоб исправить этот код. (((((

Добавлено через 2 минуты
нет это balanceXMLN как раз число

Добавлено через 10 минут
SamFR: не хочет у меня работать ( выдает ошибки

SamFR 03.12.2009 01:21

Для того, чтобы попытаться вам помочь, нужно увидеть весь код. А также чётко знать, что он должен делать, и как пытаетесь это сделать вы. Потому что, видимо, делаете вы что-то в корне неправильно (по крайней мере, судя по тому коду, что был приведён выше).

lissa81 03.12.2009 11:21

спасибо за помощь. с вашей подсказки нашла в чем ошибка и все исправила. теперь все работает.


Часовой пояс GMT +4, время: 05:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.