flash as3 лучше всего использовать xml, объект класса или статический массив для загрузки информации? - PullRequest
0 голосов
/ 15 декабря 2011

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

  1. создать класс с массивом (новый массив («водород», «гелий», «литий»,… и т. Д.)), Создать его экземпляр, затем получить доступ к информации с помощью object.arr [i]

  2. создать класс со статическим массивом (в противном случае, то же самое, что и № 1), импортировать его, затем получить доступ к информации с помощью class.arr [i]

  3. поместить информацию во внешний XML-файл и получить к ней доступ.

Третий метод кажется чрезмерным, поскольку вам приходится каждый раз сталкиваться с трудностями добавления прослушивателей событий для URLloader. Есть ли разница между 1-м и 2-м способом? (Что происходит с памятью при импорте класса - весь массив добавляется в память?)

Ответы [ 3 ]

2 голосов
/ 15 декабря 2011

Я бы пошел на третий метод :) Привыкнуть использовать xml для хранения контента всегда хорошо, и это всего лишь несколько строк кода:

 var myXML:XML;
 var myLoader:URLLoader = new URLLoader();
 myLoader.addEventListener(Event.COMPLETE, processXML);
 myLoader.load(new URLRequest("yourXmlData.xml"));


 function processXML(e:Event):void {
      myXML = new XML(e.target.data);
 }

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

2 голосов
/ 15 декабря 2011

Если все, что вы храните - это строки, вы можете использовать вектор, например:

var tableData:Vector.<String> = new Vector.<String>();
tableData.push("Hydrogen","Helium","...");

Векторы быстрее, чем массивы.В зависимости от того, как вы реализуете, вы также можете использовать Dictionay.

Если вы храните более 1 значения для каждого элемента, вы также можете использовать многомерный вектор.

Использование внешнего XML-файла медленнее.

1 голос
/ 15 декабря 2011

IMO лучший способ - иметь ссылку на XMLDocument и работать только с узлами этого документа. Таким образом, вам не нужно дублировать / анализировать новый xml, узел ссылается на узел в вашем основном XML, поэтому дублирование данных отсутствует. Я говорю это на тот случай, если вы собираетесь создать собственный класс, расширяющий фрагмент ролика, и создать его экземпляр для всех ваших объектов. Что-то вроде

package com.package.your{ 
public class YourClass extends MovieClip {
private var _node:XMLNode;
public function YourClass() {
public function setData(__xmlNode:XMLNode):void{
_node = __node
//do what you want with the info like on rollover, display this one info from the node or whatever, your clips holds all of the info that it might display...

...

Тогда, я думаю, вы создадите свою таблицу, используя цикл, так что вы идете

for(var i:uint ...
myInstance = new YourClass();
this.addChild(myInstance);
myInstance.setData(__xmlDoc.firstChild.childNodes[i]);

И, если хотите, имейте XMLDocument в Main или статический класс. Вы также можете использовать XMLList вместо XMLDocument / Node, я просто привык к «старому» способу XML ...

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