2013-10-06 6 views
0

Я пытаюсь использовать XML в flash AS3.сохранение пути к узлу XML, чтобы избежать поиска позже

var record:XML = 
<person name="Peter(Grandfather)" age=54> 
     <person name = "john(son1)" age = 28 > 
      <person name = "bran(grandson1)" age = 2 /> 
     </person> 
     <Person name = "Rob(son2)" age = 25 > 
      <person name = "lancel(grandson2)" age = 3 /> 
     </person> 

<person> 

Этот XML-список будет динамически обновляться. И для каждого нового человека, добавленного динамически, клип-клип с именем человека будет создан и добавлен на сцену. Когда клик кликается, я хочу, чтобы возраст этого человека увеличивался на 1.

Метод, который приходит мне на ум, заключается в том, чтобы сохранить имя человека в клипе. Как

... 
record.person.addChild(newperson); 
var newclip:movieClip = new MovieClip; 
newClip.name = [email protected] 
... 
<newClip mouse click event> 
record..*.(@name==newClip.name)[email protected] += 1; 
.... 

Единственное, что мне не нравится об этом методе является то, что он требует @name == newClip.name Comparision; который, как мне кажется, требует совпадения имен с каждым узлом в записи xml, что является довольно сложным процессом для большой записи XML. Мне просто нужен хороший метод для сохранения пути к заданному узлу xml, чтобы он мог быть напрямую доступен позже.

что-то вроде этого: Так,

... 
record.person.addChild(newperson); 
var newclip:movieClip = new MovieClip; 
newClip.xmlref = "<What to put here?>" 
... 
<newClip mouse click event> 
record.[newClip.xmlref][email protected] += 1; //I want to be able to do something like this 
.... 

Спасибо.

+0

Почему вы хотите сделать это с помощью XML? – Pier

ответ

0
package { 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 

/** 
* ... 
* @author Xiler 
*/ 
// CLASS TO TEST IT 
public class XMLtest extends MovieClip { 

    // YOUR XML TREE HERE 
    private var record:XML = 
    <person name="Peter(Grandfather)" age="54"> 
      <person name = "john(son1)" age = "28" > 
       <person name = "bran(grandson1)" age = "2" /> 
      </person> 

      <person name = "Rob(son2)" age = "25" > 
       <person name = "lancel(grandson2)" age = "3" /> 
      </person> 
    </person> 
    public function XMLtest() { 
     // HERE, WE CREATE A NEW XML, ADD IT TO THE TREE, MAKE A MOVIECLIP WITH A REFERENCE TO IT, AND ADD IT TO THE STAGE WITH A LISTENER 
     var newPerson:XML = < person name = "Bob(son3)" age = "19" />; 
     record.appendChild(newPerson); 
     var test1:MovieClip = new MovieClip(); 
     addChild(test1); 
     test1.xmlRef = newPerson; 
     test1.graphics.beginFill(0x41ED07, 1); 
     test1.graphics.drawRect(0, 0, 100, 100); 
     test1.addEventListener(MouseEvent.CLICK, testListener); 
    } 
    private function testListener(event:MouseEvent = null):void { 
     // HERE, IT IS CLICKED, AND THE record XML IS UPDATED AND TRACED, SO THAT YOU KNOW IT CHANGED IT. 
     var itsXML:XML = event.currentTarget.xmlRef; 
     var newAge:Number = Number([email protected]) + 1; 
     [email protected] = String(newAge); 

     trace([email protected]); 
     trace(record) 
    } 
} 
} 

Это сработало для меня. Просто скопируйте и вставьте его в основной файл .as в файл .fla и проверьте и посмотрите, как он работает. Надеюсь, это ответ на ваш вопрос, ответьте, если вам нужна дополнительная помощь.

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