Существует ли способ получить доступ или выполнить итерации через список всех объектов, экспортируемых в ActionScript от Flash IDE? Я надеюсь сохранять меня некоторая стычка, просто выполнив итерации через выбранных МГЦ и обработав их определенным способом, не зная их имена.
Спасибо.
Не во время выполнения, нет. Однако вы можете управлять объектами библиотеки с помощью JSFL в среде IDE: http://livedocs.adobe.com/flash/9.0/main/flash_cs3_exnding.pdf . Не уверен, что это вообще помогает, но, возможно, вы сможете сгенерировать код для использования в своем приложении, проанализировав библиотеку каким-либо образом.
var lib = fl.getDocumentDOM().library;
for (var i = 0; i < lib.items.length; i++)
{
var item = lib[0];
fl.trace(item.name + " " + item.getItemType());
}
Возможно, сгенерируйте код на основе библиотечных объектов: getItemProperty ()
или getItemType ()
.
В остальном, я думаю, вам лучше всего поступить так, как сказали другие. Создайте фиктивный MovieClip, внутри которого есть все элементы, и скройте его за пределами сцены. Добавьте на него слушателя для «добавленного на сцену» и переберите его дочерние элементы и используйте «отражение» getQualifiedClassName для выполнения действий на основе этого класса или просто используйте имя экземпляра и оператор switch.
И наконец, что именно вы «обрабатываете» на каждом из этих видеоклипов? Возможно, это больше проблема дизайна, и все они должны расширять общий подкласс MovieClip, в который добавлен обработчик «добавлен на сцену», где вы смотрите на тип MovieClip, добавляемый в ваше приложение, и выполняете некоторые действия в нем одиночная функция . Я сейчас работаю над некоторой работой по локализации, и именно так мы обрабатываем несколько разных клипов во время выполнения.
Этот вопрос в чем-то похож на этот .
Это JSFL, который вам нужно, чтобы перечислить только MovieClips, которые экспортируются в actionscript:
var doc = fl.getDocumentDOM();
var libItems = doc.library.items;
var libItemsNum = libItems.length;
var classesString = 'var '+doc.name.substr(0,doc.name.length-4)+'Classes = [';
var classesNum = 0;
var classes = [];
fl.outputPanel.clear();
for(var i = 0 ; i < libItemsNum; i++){
if(libItems[i].linkageExportForAS){
classes[classesNum] = libItems[i].linkageClassName;
classesNum++;
}
}
for(i = 0; i < classesNum; i++){
if(i < classesNum-1) classesString += '"'+classes[i]+'",';
else classesString += '"'+classes[i]+'"];';
}
fl.clipCopyString(classesString);
fl.trace(classesString);
Он отслеживает имена ваших экспортированных классов в виде массива строк, так что вы можете использовать его с getDefinitionByName ApplicationDomain () или flash.utils.getDefinition () . Кроме того, он копирует отслеженное сообщение в буфер обмена. Если вы сохраните JSFL в папке Commands , вы можете установить сочетание клавиш для некоторой скорости.
HTH, Джордж
В основном, Нет ... При экспорте в ActionScript в библиотеке он становится классом. То же, что и другие классы - MovieClip, Loader ... и т. Д. все это свойства времени компиляции. По сути, нет никакого способа узнать эти классы во время выполнения.
Но вы упомянули итерацию через MC и что-то с ними делать. Если вам нужно что-то сделать с MC, уже находящимися на стадии, в зависимости от их класса, вы можете сделать это, используя следующее:
for (var i=0; i<this.numChildren; i++){
trace("Movie Name: "+this.getChildAt(i).name);
trace("Movie Class: "+getQualifiedClassName(this.getChildAt(i)));
}
Использование вышеуказанного цикла и getQualifiedClassName может быть альтернативным решением.
«Проблематично» - это не то слово, которое я бы использовал для описания работы с потоками. «Утомительный» - более подходящее описание.
Если вы новичок в многопоточном программировании, я бы предложил прочитать этот поток в качестве отправной точки. Он отнюдь не является исчерпывающим, но содержит хорошую вводную информацию. Оттуда я бы продолжал прочесывать этот сайт и другие сайты программирования на предмет информации, связанной с конкретными вопросами многопоточности, которые у вас могут быть.
Что касается конкретных опций многопоточности в C #, вот несколько предложений о том, когда использовать каждую из них.
В Access, вероятно, вы найдете соединение быстрее, если ваши таблицы не
SELECT DISTINCT Table1.Column1
FROM Table1
LEFT JOIN Table2
ON Table1.Column1 = Table2.Column1
WHERE Table2.Column1 Is Null
Это исключит из списка все записи с совпадением в Table2.
-121--3107628-У меня была аналогичная проблема, и я был бы заинтересован в решении, если бы оно было лучше. Тем не менее, то, что я в итоге сделал, было то, что конструктор каждого элемента найти класс документа (путем вызова this.parent, пока он не нашел тот, который был из правильного класса), а затем вызвать функцию этого класса документа.
Я пытался предоставить игре информацию о местоположениях, которые я разместил в среде IDE.
Поэтому я дал Location конструктор так:
public function Location(){
var d:DisplayObject = parent;
while(!(d is Game)){
d = d.parent
}
d.addLocation(this);
}
Тогда в классе Game я смог добавить их в массив и повторить через них. Я уверен, что это не лучший способ сделать это, но это сработало.