Flash-действия выполняются снова и снова - PullRequest
0 голосов
/ 21 февраля 2012

Мой слой flash-действий содержит весь исходный код.Мой вопрос: почему слой действий выполняется с новым началом (новые переменные) более одного раза?

следующий фрагмент кода демонстрирует, что я имею в виду:

var notyetexecuted:Boolean=true;
function addNetStream(counter) {
if (notyetexecuted = true) {
    trace(notyetexecuted);

    notyetexecuted=false;
}
}

это всегда возвращаетЗначение true, что означает, что слой действий выполняется снова.Исходя из Java, это не имеет смысла для меня.

/ edit: я забыл упомянуть, что у меня есть функция интервала (все еще логическое значение должно быть ложным, а addNetStream ничего не должен делать)

function User():Void {
trace("Aktuelle Anzahl User: " + counter);
if (counter > prevcounter) {
    addNetStream(counter);
    counter++;
} else if (counter < prevcounter) {
}
}
myInterval = setInterval(this, "User", 3000);

Может ли кто-нибудь объяснить, почему это так, и как Flash выполняет слой?веселит.

Ответы [ 4 ]

1 голос
/ 21 февраля 2012

Используйте оператор равенства.

if (notyetexecuted == true) {
    // ...
}
1 голос
/ 21 февраля 2012

Это из-за вашего теста в этой строке:

if (notyetexecuted = true)

Это значение notyetexectuted to true, оно должно быть:

if (notyetexecuted == true)

Обратите внимание на двойной ==

0 голосов
/ 22 февраля 2012

Довольно ясно, что у вас есть ответ, который вам нужен.

Но, для чего это стоит, этот тест:

if (notyetexecuted == true) {
    // ...
}

... можно смело упростить до этого:

if (notyetexecuted) {
    // ...
}

... поскольку notyetexecuted является логическим значением и может быть только TRUE или FALSE .

Использование этого стиля облегчает чтение вашего кода и позволяет избежать "=" / "==" trap.

Удачи!

0 голосов
/ 21 февраля 2012

Если у вас есть несколько кадров на временной шкале, Flash прочитает их и зациклит.Каждый раз, когда он возвращается к кадру, содержащему действия, они запускаются снова.

Также вы можете испытать двойной запуск события добавленного этапа.Используйте следующий код (по умолчанию в flashdevelop).

public function Main():void 
{
    if (stage) init();
    else addEventListener(Event.ADDED_TO_STAGE, init);
}

public function init(e:Event = null):void 
{
    removeEventListener(Event.ADDED_TO_STAGE, init);
    // entry point
}
...