Свойство name в ActionScript 3 не возвращает правильное имя ...? - PullRequest
0 голосов
/ 04 апреля 2009

У меня возникла проблема со свойством name в as3, я создал этот "точечный" мувиклип и экспортировал в класс, затем я анонимно создал кучу точек, используя цикл. Я назначил номера в качестве имени для каждой точки

private function callDots(num:Number):void
    {                
        for (var i = 0; i < subImagesTotal[num]; i++)
        {
            var d:Dot = new Dot();
            d.x = i*23;
            d.y = 0;

            d.name = i;
            dotContainer.addChild(d]);
        }
    }  

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

private function callFullSub(e:MouseEvent):void
   {
        var full_loader:Loader = new Loader();
        var temp:XMLList = subImages[sub];
        var full_url = temp[e.target.name].@IMG;

        full_loader.load(new URLRequest(full_url));
        full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoaded);
    }  

Предполагается, что e.target.name должны быть числами вроде 1 или 2, но это дает мне «instance66», «instance70» и я понятия не имею почему. Потому что раньше я делал то же самое с загрузчиками, и это полностью сработало. Есть идеи? Спасибо.

Christine

Ответы [ 5 ]

2 голосов
/ 27 апреля 2009

Ответ [e.currentTarget.name] Я выполняю это все время!

Должен вернуть "Dot1", "Dot2" и т. Д.

Если значение, которое вы хотите вернуть, является числом или другим типом данных, кроме строки (имя объекта), используйте [e.currentTarget.name.substr (3,1) .toString ()]

Должен вернуть 1, 2 и т. Д.

Navee

2 голосов
/ 04 апреля 2009

e.target возвращает самый внутренний объект, по которому щелкнули, это может быть TextField, другой MovieClip или, возможно, фигура (я не на 100% последней) внутри «Точки».

Чтобы предотвратить это, вы можете попытаться установить для свойства mouseChildren значение false на точках при их добавлении. Это должно гарантировать, что ничто внутри точек не может обработать событие щелчка, и, таким образом, точки должны это сделать.

Возможно, вы также можете в обработчике событий проверить тип цели с помощью кода, подобного следующему:

private function callFullSub(e:MouseEvent):void
{
    if(!e.target is Dot)
        throw new Error("target in callFullSub is not Dot but: " + e.target.toString());

    //The rest of you code here
}
1 голос
/ 13 марта 2012

Попробуйте, это может работать, ..

d.name = i.toString(); 
1 голос
/ 04 апреля 2009

Я попытался воспроизвести вашу проблему сначала с помощью Flex с использованием мувиклипа, созданного во время выполнения, а затем с помощью Flash с использованием символов Dot movieClip, экспортированных для ActionScript. Ни одно из приложений не показывало проблему.

Возможно, вы уже знаете имена, такие как "instance66", "instance70" - это именованные имена экземпляров по умолчанию. Таким образом, все, что отправляет MouseEvent, НЕ является точечным экземпляром. Возможно, вы непреднамеренно присваиваете callFullSub неверным целям, может быть, вашим контейнерам? Попробуйте назначить его точечному экземпляру сразу после его создания, например:

private function callDots(num:Number):void
{                
    for (var i = 0; i < subImagesTotal[num]; i++)
    {
        var d:Dot = new Dot();
        d.x = i*23;
        d.y = 0;

        d.name = i;
        d.addEventListener(MouseEvent.CLICK, callFullSub);
        dotContainer.addChild(d]);
    }
}

Обязательно временно закомментируйте исходное назначение.

0 голосов
/ 05 апреля 2009

Вы не показали достаточно своего кода, чтобы я мог дать вам ОПРЕДЕЛЕННЫЙ ответ, однако я скажу это.

//After you create each loader you need to set its mouseEnabled
//property to false if you do not want it to be the target of
//Mouse Events, which may be superseding the actual intended target;

var full_loader:Loader = new Loader();
full_loader.mouseEnabled = false;
//Also you could name the loaders and see if what comes back when you click is the same.

ТАКЖЕ! Добавьте это в свой обработчик событий мыши для CLICK или MOUSE_DOWN:

trace(e.target is Loader);  //If traces true you have an answer

Я считаю, что события мыши отправляются загрузчиками.

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

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