АС3. Как использовать общедоступную переменную в кадре временной шкалы?

Я создаю игру, в основном классе я объявил переменную: public var attack:Number = 0; это динамическое значение (всегда меняющееся), и мне нужно установить его на 0 в последнем кадре анимации на временной шкале.

Когда я пытаюсь использовать attack=0 в последнем кадре, я получаю сообщение об ошибке: 1120: Access of undefined property attack.

Спасибо за ответы.


person Community    schedule 25.01.2014    source источник


Ответы (2)


Вы также можете использовать события:

на вашем последнем кадре:

dispatchEvent(new Event("lastFrameCustomHandler", true, true));

в вашем коде:

addEventListener("lastFrameCustomHandler", handleLastFrame); 
function handleLastFrame (event:Event):void 
{
  attack = 0;
}
person mika    schedule 26.01.2014

Попробуйте использовать addFrameScript из вашего основного класса:

asset.addFrameScript( asset.totalFrames-1, function():void { attack = 0; } );

Немного уточнив, как работает addFrameScript(), всякий раз, когда вы компилируете MovieClip из своей библиотеки, если вы не связываете с ним класс, компилятор создает его для вас за кулисами. addFrameScript() — это недокументированная связь между временной шкалой MovieClips и связанным сценарием. Когда вы запускаете addFrameScript() на MovieClip, вы устанавливаете его с параметрами ( frameNumber - 1, functionToCall ). Ваша временная шкала MovieClip начинается с кадра 1, но на самом деле это читается как кадр 0 при ссылке (аналогично тому, как контейнеры хранения работают, начиная с индекса 0).

В моем примере я передал так называемую анонимную функцию. Я создал функцию для параметра функции в addFrameScript(), которая установит переменную атаки на 0, когда мы достигнем указанного кадра. Конечно, вы не должны делать это таким образом. Скажем, у вас была функция:

function setAttackToZero():void {
    attack = 0;
}

Вы можете так же легко передать это в параметр addFrameScript:

asset.addFrameScript( asset.totalFrames-1, setAttackToZero );
person Bennett Yeates    schedule 26.01.2014
comment
Спасибо за ответ, не могли бы вы объяснить мне, как это работает? у меня идут ошибки 1120: Access undefined of property asset and frameNumber - person ; 26.01.2014
comment
Да, вам нужно заменить актив, когда имя вашего объекта отображения имеет временную шкалу анимации. затем замените номер кадра последним номером кадра вашего актива (вычтенным на 1). Я предположил, что информация была предоставлена, поэтому я обновлю часть ответа frameNumber, чтобы она была более конкретной. - person Bennett Yeates; 26.01.2014
comment
Не могли бы вы объяснить, как это работает? Если текущий кадр актива != totalFrames Он устанавливает атаку = 0 или как это работает? - person ; 29.01.2014
comment
Конечно, я могу добавить в свой ответ, как работает addFrameScript. Хотя это должно было быть больше похоже на то, что currentFrame == totalFrames, а не !=. - person Bennett Yeates; 29.01.2014