2013-02-09 2 views
0

ОК, я ActionScript noob. Я могу сделать «щелкнуть здесь, чтобы туда», что-то вроде всего, все временные сценарии.доступ к переменной в SWF-файле из другого SWF-файла

Тогда у меня был этот проект, сбрасываемый у меня на коленях (потому что я «Flash Guy»), и хотя я читал кучу вещей, которые имеют смысл, мне нужен кто-то, кто мне точно скажет, что кодировать где. Я обещаю, что вернусь, как только это закончится, и изучите реальный AS3, у меня есть книги и хороший учебник.

Вот задача. У меня есть один SWF-файл (мы будем называть его parent.swf), который просит пользователя ввести имя в текстовое поле (hostNameInput) и сохраняет его в переменной (hName).

var hName:String; 

hospNameInput.addEventListener(Event.CHANGE, inputCapture1); 
function inputCapture1(evt:Event):void 
{ 
hName = hospNameInput.text; 
} 

мне нужно использовать переменную строку «hName» в другой SWF (child.swf, который загружается parent.swf) для того, чтобы добавить текст имени в текстовых полях на многих кадрах моего файла. Это, по сути, прославленное слайд-шоу с некоторой интерактивностью в кадрах, и они хотят иметь возможность персонализировать его для людей, которых они представляют.

У меня есть текстовые поля в child.swf которые я хотел бы, чтобы заполнить с текстом в переменной «hName» из parent.swf, как:

var frameHeader:String = "01 " + hName + " Today"; 
frameHeader1.text = frameHeader; 
chartLabel.text = hName + " Analysis"; 

Как я уже сказал, я просто wimpy timeline coder. Может ли кто-нибудь дать мне достаточно четкие инструкции о том, что добавить в каждый SWF, чтобы заставить это работать?

Я обещаю прочитать книги и научиться делать это правильно, внешние .as файлы и все!

ответ

0

Попробуйте получить доступ к переменной через свойство содержимого объекта Loader. Свойство содержимого должно ссылаться непосредственно на временную шкалу загруженного SWF.

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html?filter_flash=cs5&filter_flashplayer=10.2&filter_air=2.6#content

0

Для тех, кто все еще возникают проблемы с этим, вы можете попробовать следующие шаги ...

  • Вы должны создавать текстовые поля с кодом. Сначала добавьте поле ввода на этап
  • Загрузите внешний SWF и обработайте его как объект MovieClip.
  • Добавить - введите текстовое поле (с сохраненным вводом) в MovieClip (загруженный SWF).

Для примера приведен пример кода. Он добавляет окно ввода, и когда пользователь нажимает кнопку «load SWF», он загружает внешний SWF, а затем добавляет текстовое поле с копией введенного текста. Чтобы сделать кнопку «load SWF», просто создайте простую графику, такую ​​как красный квадрат, конвертируйте в movieClip и дайте ей имя ссылки «btn_load_SWF». (Код по-прежнему будет работать как кнопка). Также при создании текстовых полей по коду вы можете делать заметки на X & Y позициях, которые вы хотите, чтобы они отображались. Используйте инструмент «Информация» (CTRL + I), чтобы получить подсказки о позиции мыши/объекта на сцене. В любом случае, весь код идет в одном кадре.

//-- For later referencing of Child.swf as though it's MovieClip on stage named "my_Child_Swf" 
var my_Child_Swf:MovieClip; 

//-- create User Input textbox 
var input_txt:TextField = new TextField(); 
input_txt.type = "input"; 
input_txt.border = true; 
input_txt.x = 50; 
input_txt.y = 100; 

//-- create string to hold User Input for passing onto a Child.swf textbox 
var saved_text:String; 

//-- create Name textbox for Child.swf (later will contain text of "saved_text") 
var name_txt:TextField = new TextField(); 
name_txt.type = "dynamic"; 
//name_txt.border = true; 
name_txt.x = 10; 
name_txt.y = 10; 
name_txt.width = 50; 

//-- Now add User Input box to screen 
stage.addChild(input_txt); 

//-- load SWF 
var swf_loader:Loader = new Loader(); 

//add loader object to stage BEFORE you do anything with external SWF.. 
stage.addChild(swf_loader); 
btn_load_SWF.buttonMode = true; 
btn_load_SWF.addEventListener(MouseEvent.CLICK, load_Child_SWF); 

//Button control function 
function load_Child_SWF (event:MouseEvent) : void 
{ 
    saved_text = input_txt.text; //capture text as we begin load of Child SWF 
    trace("input_txt is..." + saved_text); //trace is for testing/confirmation 

    swf_loader.load (new URLRequest ("Child.swf")); 
    swf_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, Child_SWF_ready); 
} 

function Child_SWF_ready (evt:Event) : void 
{ 
    swf_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, Child_SWF_ready); 
    swf_loader.x = stage.stageWidth/2; 
    swf_loader.y = 200; 

    //Treat the Loader contents (Child.swf) as a MovieClip named "my_Child_Swf" 
    my_Child_Swf = swf_loader.content as MovieClip; 

    //Position of text when adding to Child SWF 
    //note: Its top-left corner is new X & Y point set to 0 
    name_txt.x = 10; //10 pixels from 0 point of Child SWF 
    name_txt.y = 10; 

    updateText(); //do instructions inside function "updateText" 
    my_Child_Swf.addChild(name_txt); //add (updated) name text to Child SWF 

} 

function updateText() : void 
{ 
    name_txt.text = saved_text; //apply the saved_input String here 
} 

Этого должно быть достаточно, чтобы вы начали. Другие вещи, чтобы посмотреть, как установить и внедрить шрифты, установить размер текста & цветов и т. Д. Через код. Для записи любой кодировки на временной шкале это не лучший способ работы. Я поместил весь свой код в одно место, в .as-файл. Я не могу предсказать, что произойдет, когда вы перейдете на другой кадр & наборы кода. При этом это было проверено на временной шкале и работает.Спасибо, VC: Один

Смежные вопросы