почему мой код AS3 не работает? Почему переменная не постоянно увеличивается, а равна 1?

Во-первых? Я новичок в actionscript 3 и Flashdevelop. Почему значение var a не постоянно увеличивается, а просто равно 1? Где у меня ошибки?

package
{

    import flash.display.MovieClip;

    public class Main extends MovieClip 
    {

        public function Main() {
           var a: int;
            a = a + 1;
            trace(a);
        }
    }
}

person user2743114    schedule 03.09.2013    source источник
comment
Обратите внимание, что оба ответа от Vesper и moosefetcher ниже верны. Ваша функция-конструктор Main() выполняется только один раз. И если бы вы (каким-то образом) вызвали ее снова, переменная a была бы только локальной переменной и сбрасывалась бы каждый раз, когда вы вызываете функцию (вместо этого повышайте ее до переменной-члена).   -  person Sunil D.    schedule 03.09.2013


Ответы (4)


Функция Main — это функция-конструктор вашего основного класса, поэтому она вызывается только один раз. Таким образом, переменная 'a' увеличивается только один раз. Вам нужно будет добавить какой-то цикл, чтобы «а» увеличивалось чаще.

person moosefetcher    schedule 03.09.2013

Ваша переменная является локальной для функции, поэтому каждый раз, когда функция вызывается, создается новая переменная со значением по умолчанию (для типа int это 0), затем увеличивается, затем выполняется трассировка, в результате чего вы видите 1. Также, если вы планируете храните переменные cross-runs, используйте SharedObject хранилище, так как даже глобальная или статическая переменная класса не сохранит свое значение, если вы перезапустите скомпилированный SWF.

person Vesper    schedule 03.09.2013

Все вышеперечисленные ответы верны. Вот способ, который может работать, похожий на то, что вы делаете.

package
{
    import flash.display.MovieClip;

    public var a:int = 0;

    public class Main extends MovieClip 
    {
        public function Main() {
            a = a + 1;
            trace(a);
            Main();
        }
    }
}

ПРИМЕЧАНИЕ. Это нехорошо! это будет продолжаться вечно и ничего хорошего из этого не выйдет. Это может иметь больше смысла:

package
{
    import flash.display.MovieClip;

    public class Main extends MovieClip 
    {
        public function Main() {
            var a:int = 0;
            while (a < 1000)  // desired upper value here 
            { 
                trace(a); 
                a++; 
            }
        }
    }
}
person NappingRabbit    schedule 03.09.2013

Что значит постоянно? Также ваша переменная не имеет начального значения:

var a:int = 0;
a = a + 1;
trace(a);
person Krasimir    schedule 03.09.2013
comment
Переменной простого типа присваивается начальное значение при отсутствии кода инициализации. Для целых чисел это 0, а для типа Number это undefined, что на сегодняшний день приводит к серьезной травме многих разработчиков игр :) - person Vesper; 03.09.2013
comment
Спасибо за разъяснение Веспер. - person Krasimir; 03.09.2013
comment
Если кого-то продолжают смущать неинициализированные переменные, значит, что-то делается не так. - person Panzercrisis; 03.09.2013