Как вызвать экземпляр кнопки во внешнем скрипте .as? - PullRequest
1 голос
/ 08 декабря 2010

Я создал кнопку на своей сцене. Я установил имя экземпляра на init, и MainTimeline вызывается из внешнего скрипта:

. / Проект / MyFlash.fla

. / Проект / MyFlash_fla / MainTimeline.as

Я новичок во Flash, пытаюсь создать кнопку и вызвать ее внутри MainTimeline.as; вернулась ошибка: ReferenceError: Error #1065: Variable init is not defined. at tfm::MainTimeline()

Я также пытался var init:Button = new Button(); без удачи.

Более конкретно, я пытаюсь сделать это:

function MainTimeline(){
    //var init:Button = new Button();
    init.addEventListener(MouseEvent.CLICK, begin);
}
function begin(){
    addFrameScript(0, frame1);
}

Это мой импорт (и я добавил даже бесполезные в отчаянии):

import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.system.*;
import flash.utils.*;
import flash.text.*;
import flash.xml.*;
import flash.media.*;
import fl.controls.Button;
import flash.*;
import fl.*;
import fl.controls.*;

Любое возможное решение?


Обновление: Я связываю внешний скрипт в свойстве stage, Class как MyFlash_fla.MainTimeline

Я получил ошибку «var notfined», просто добавив this., предшествующий init.add[...]. Моя текущая ошибка: TypeError: Error #2007: Parameter listener must be non-null at flash.events::EventDispatcher/addEventListener() at tfm::MainTimeline(). Извините, что сначала я не совсем понятен, но у меня есть кнопка на моем этапе, и я пытаюсь заставить ее выполнять функцию begin() при каждом нажатии. В настоящее время эта ошибка возвращается, и begin() выполняется без какого-либо взаимодействия.


Обновление II. Я устранил последнюю ошибку, добавив event:Event в begin(event:Event){.... Кажется, все идет гладко. Я остался с ошибкой, хотя; это ни на что не влияет, но я все равно хотел бы избавиться от него: ReferenceError: Error #1065: Variable init is not defined. at tfm::MainTimeline/__setProp_init_Scene1_Layer1_0() at tfm::MainTimeline() - Что это?

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

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

Если ваша «кнопка» в этомcase - это flash-объект, который вы превратили в символ и выбрали сделать его символом типа «Button», тогда вы захотите убедиться, что в библиотеке .fla файла вы экспортируете этот символ для Actionscript.

Контролируйте / щелкните правой кнопкой мыши на элементе библиотеки, который вы сделали, и перейдите в «Свойства».Оттуда вы захотите установить флажок «Экспорт для Actionscript».Вы захотите дать этому объекту пользовательской кнопки имя класса (и объект на вашей сцене будет экземпляром этого класса).

Далее: Если ваш внешний документ .as называется «MainTimeline.as», вы, вероятно, захотите сделать класс документа вашего .fla файла "MainTimeline" (при условии, что он находится в той же директории, что и ваш .fla файл, которым он и является).Вы можете сделать это, нажав на сцену в вашем файле .fla (или просто отменив выбор всего остального) и перейдя в окно меню свойств.В части, где написано Class: [ пустое текстовое поле ], вы захотите заполнить «MainTimeline».Это будет означать, что MainTimeline является общим базовым классом для этого SWF-файла, и любые экземпляры, добавляемые на сцену, должны быть доступны в этом классе (как если бы они были экземплярами, созданными кодом в реальном файле .as).

В этом файле MainTimeline.as, если вы поместите в него следующий текст и ваша кнопка станет невидимой при компиляции и запуске SWF, это, вероятно, должно указывать на то, что все работает.

Код MainTimeline.asпопробуйте:

package
{
    import flash.display.MovieClip;

    public class MainTimeline extends MovieClip
    {
        public function MainTimeline()
        {
            init.visible = false;
        }

    }

}

Надеюсь, это поможет!

0 голосов
/ 08 декабря 2010

Вам понадобится доступ к кнопке через основной DisplayObjectContainer (вероятно, this в вашем контексте, но трудно узнать без дополнительной информации)

Используйте метод getChildByName(name:String):DisplayObject для ссылки на init button.

var init:Button = this.getChildByName("init") as Button;
init.addEventListener(MouseEvent.CLICK, begin);

Должен делать то, что вы хотите.

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

Было бы полезно, если бы вы показали, как вы связываете, в своем внешнем скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...