Передача переменной между кадрами с ActionScript 3 - PullRequest
4 голосов
/ 27 октября 2010

Я новичок в ActionScript 3.0 и испытываю трудности при попытке передать переменную, созданную и заданную в кадре 1, в динамическое текстовое поле, добавляемое к сцене в кадре 4.

в кадре 1 переменная устанавливается из информации, введенной пользователем: var input_dia = ""; input_dia = pdia_input.text;

и должен отображаться в динамическом текстовом поле в кадре 4: dia_alert.text = input_dia;

Я получаю следующую ошибку: 1120: Доступ к неопределенному свойству input_dia.

Ответы [ 4 ]

11 голосов
/ 27 октября 2010

Вы должны себе представить - разные сцены во многом похожи на отдельные фильмы, и у вспышки возникают проблемы с их разделением.

Правильный способ сделать это - начать использовать ООП (объектно-ориентированное программирование) AS3. Вам нужно будет создать нечто, называемое классом документа. Это фактически код, который живет вечно за кулисами (не каламбур) Вы можете хранить вещи в этом классе и читать их позже, когда пожелаете.

Это проще, чем кажется, и после настройки - это позволит вам начать перемещать код со своей шкалы времени.


Сначала создайте файл с именем «DocumentClass.as». Это действительно может называться как угодно, но это очень хорошая практика.

Сохраните этот файл в том же месте, где находится FLA, с которым вы работаете, - в той же папке.


В CS3 - на панели свойств в нижней части экрана - когда вы выберете этап, появится небольшое поле, позволяющее вам ввести в него имя класса документа. Введите имя файла, который вы только что создали, «DocumentClass» * без расширения «.as» - нажмите на ссылку, если вы не уверены, где именно вам нужно набрать.

http://curtismorley.com/wp-content/uploads/2007/07/documentclasspath_bad.JPG

Обратите внимание на прописную букву - это хорошая практика


Откройте этот файл во Flash и напишите следующий код. Точно так, как я пишу это

DocumentClass.as

package {

  //Call this class the SAME NAME as the file - VERY IMPORTANT
  class DocumentClass extends MovieClip
  {

    //This is an example of a variable - a container
    //of information of which is public - and can be 
    //seen by all the scenes in your flash movie.
    public var myName:String = "Jay Jagpal";

    //This is called a construct - this function automatically
    //runs when this class is seen by flash.
    public function DocumentClass()
    {
      //nothing needs to go here for you today...
    }
  }

}

Вы можете видеть внутри все то, что я пишу для вас. У меня есть переменная myName - вы можете создавать то, что вы хотите - myAge ... textToBeInAllScenes ... girlfriendsWeightToday ... Вызовите что угодно.


Дальнейшее объяснение

Класс - это блок кода, который создается в памяти при необходимости. DocumentClass - это то же самое, но оно живет всю жизнь вашего приложения.

A package - это просто фантастика, так как 3 говорят «положи вещи в коробку» - они могут стать более продвинутыми, но это уже суть.

класс DocumentClass расширяет MovieClip - Вы говорите flash "мой класс называется DocumentClass" - этот расширяет то, что называется MovieClip.

MovieClip - это класс, точно такой же, как у вас, но он создан для вас и живет внутри flash. Он содержит много кода для анимации. Ваша Flash-сцена сама по себе является просто видимой версией этого мувиклипа.

вам нужно расширить этот класс, потому что вы в значительной степени хотите [поддельным образом] скопировать, вставить весь готовый код и использовать его в вашем DocumentClass. Теперь вы расширяете MovieClip, и ваш код накапливается поверх уже существующего.

публичная функция DocumentClass () - да, это функция. Но это называется «конструкция». Это особый тип функций, который живет внутри класса. Во-первых, он имеет то же имя. Это позволяет Flash легко найти его. Его особая задача заключается в том, чтобы автоматически запускать свой код, когда этот класс создан и виден во флэш-памяти. Все автоматические см ...


Важной частью для вас является public var, который я добавил. Это ведро, в котором вы можете хранить свою информацию.

Часть public сообщает вспышке, что угодно может увидеть это, если захочет, сцены, другие классы ... люди на улице - Все что угодно!

: строка после имени вашей переменной (или области памяти), она сообщает flash, какой тип информации будет храниться в переменной var. Это не важно для приложения - но для хорошего кода ООП - сделайте это. (приведение переменных Google AS3)

Существует много типов переменных: String , Number , int , Boolean и т. Д. Примерно 7 базовых .


Я думаю, этого достаточно для StackOverflow - он будет работать -

быть предупрежденным Большинство ошибок - ваши орфографические ошибки ... Flash не любит орфографические ошибки.


Наслаждайтесь!

1 голос
/ 25 июня 2017

Простым исправлением будет создание глобальной переменной вместо локальной.

var myVar = "hi" ;

до

this.myVar = "hi" ;

Если вы удалили декаль в кадре Action Layer 1, вы можете получить доступ к this.myVar в других кадрах

1 голос
/ 27 октября 2010

Оба ответа хороши (я проголосовал за них), но, судя по вашему коду, создается впечатление, что вы создаете простую форму и, возможно, не хотите тратить слишком много времени. Самое быстрое решение - это по-прежнему кодировать на временной шкале, но размещать все в первом кадре. Вместо того, чтобы переходить в разные кадры, вы будете изменять видимое свойство, чтобы скрывать и показывать разные мувиклипы.

Таким образом, ваше диалоговое окно с ошибкой всегда будет присутствовать, но будет скрыто при запуске, когда пользователь вводит данные, и я предполагаю кнопку отправки, тогда может отображаться ваше предупреждение MovieClip. Поскольку все находится в первом кадре, вы можете легко присвоить значения текстовым полям.

1 голос
/ 27 октября 2010

Фрейм-скриптинг, по моему мнению, гетто и его следует избегать.

при этом ваша проблема может быть решена несколькими способами. Во-первых, вы создаете слой «Действия», который доступен для всех кадров, растягивая слой на всю временную шкалу, но весь ваш скрипт действий находится в первом кадре. во-вторых, поместив текстовое поле на отдельный слой, доступный в первом кадре, но становится видимым только в кадре 4 (при условии, что вы не хотите, чтобы оно отображалось до кадра 4).

однако, ООП и шаблон проектирования спуска, как предполагает Глицерин, определенно - путь, особенно если вы новичок и планируете дальнейшие инвестиции в флеш-платформу.

предложения некоторых книг: Essential ActionScript Колина Мука 3.0 , Краткое справочное руководство по ActionScript 3.0 , Анимация ActionScript 3.0 Фонда Кайта Питера: заставляя двигаться! Расширенная анимация ActionScript 3.0 . Эти книги, безусловно, дадут вам прочную основу для правильной разработки платформы flash. если вы прочитаете их, вы не пожалеете об этом.

...