Преобразовать узел XML в мувиклип - PullRequest
3 голосов
/ 20 января 2010

У меня есть XML-документ, который я хотел бы использовать для отображения MovieClips в моем .fla:

<linkedMovieClip>TestClip</linkedMovieClip>

В моем .fla я создал символ с именем TestClip и выбрал Linkage> Export for Actionscript иназвал его TestClip.

Мой код в моем классе Document отслеживает xml:

var t:*= getDefinitionByName(String(slideItem.linkedMovieClip)) as Class;
var linked:MovieClip = new t();
trace("linked is..."+ linked); // outputs [Object TestClip];

Однако, когда я компилирую, я получаю ошибку # 1065.

ReferenceError: Error #1065: Variable  is not defined.
    at global/flash.utils::getDefinitionByName()

Я искал вокруг, и многие сайты рекомендовали, включая следующий импорт:

import flash.utils.getDefinitionByName;
import TestClip;

И я включил следующую фиктивную переменную:

public var _dummyClip:TestClip;

Однако, я все еще получаю сообщение об ошибке.Когда я проверяю отладчик, это из этой строки:

var t:*= getDefinitionByName(String(slideItem.linkedMovieClip)) as Class;

Кто-нибудь может посоветовать?

Ответы [ 2 ]

1 голос
/ 20 января 2010

С ответом выше я вижу свою проблему сейчас.

Мой XML выглядел так:

<items>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item></item>
<item><linkedMovieClip>TestClip</linkedMovieClip></item>
<item></item>
</items>

то есть у некоторых элементов были узлы, у некоторых - нет.

Когда я использую цикл for each (var item:XML in itemList) для итерации по моим XML-узлам (), узлы, которые не содержат этот узел, завершаются с ошибкой и возвращают опорную ошибку (так как нет узла с именем "connectedMovieClip".

Если я используюОператор if, проверяющий наличие узла, работает:

 if (xmlListname.linkedMovieClip != undefined) {

         trace(String(xmlListname.linkedMovieClip));
  var c:* = getDefinitionByName(String(xmlListname.linkedMovieClip)) as Class;
         var mc:MovieClip = new c();
  trace(mc);
 }
1 голос
/ 20 января 2010

Ваш код выглядит хорошо.Попробуйте создать экземпляр TestClip в вашей программе, чтобы убедиться, что он скомпилирован в SWF.Найдите полное имя и убедитесь, что оно действительно TestClip

var _dummyClip:TestClip = new TestClip();
trace(flash.getQualifiedClassName(_dummyClip));//what does it trace?
...