защо моят 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' се увеличава само веднъж. Ще трябва да добавите цикъл от някакъв вид, за да имате "a" нарастване по-често.

person moosefetcher    schedule 03.09.2013

Вашата променлива е локална за функцията, така че при всяко извикване на функцията се създава нова променлива със стойност по подразбиране (за тип int тя е 0), след това се увеличава, след това се проследява, което води до това, че виждате 1. Също така, ако планирате да съхранявайте променлива кръстосано, използвайте 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
На променлива от прост тип се присвоява начална стойност, когато няма код за инициализация. За ints е 0, но за тип Number е undefined, което води до сериозен удар на много разработчици на игри до момента :) - person Vesper; 03.09.2013
comment
Благодаря за пояснението Веспер. - person Krasimir; 03.09.2013
comment
Ако някой продължава да се хвърля от неинициализирани променливи, значи нещо не се прави както трябва. - person Panzercrisis; 03.09.2013