getDefinitionByName работает с пользовательскими классами? - PullRequest
0 голосов
/ 15 июля 2010

Интересно, flash.utils.getDefinitionByName (name: String): класс работает с пользовательскими классами?Есть ли проблема, если у класса есть конструктор, который принимает аргументы?Я говорю это, потому что у меня есть класс в пакете вида packageA.packageB, и когда я ввожу имя класса в вышеуказанную функцию, так как packageA.packageB.ClassName не работает.Также я попытался (с тем же результатом) вывод из getQualifiedClass, который дает packageA.packageB :: ClassName.Любые идеи ??

Вот часть кода, которая принадлежит файлу, который импортируется как import factory.scratchers. *;все элементы, которые имеют имена AlphaScratcher, DissolveScratcheer, ExplodeScratcher и т. д.Соответствует ли вышеуказанный импорт требованию?

import factory.scratchers.*;
...
for ( var iArea:uint = 0; iArea < _totalScratchAreas; iArea++ ) {       
                var sourceArray:Array = new Array();
                var currentNameArray:Array = _globalAssetNameArray[iArea];
                var theScratcher:Scratcher;
                for ( var index:uint = 0; index < _globalMsgArray[iArea].length; index++ ) {
                    // here i would like to have something like:>
                    var ScratchClass:Class = getDefinitionByName( "factory.scratchers::ExplodeScratcher") as Class;
                    theScratcher = new ScratchClass( _assetGenerator, _mainSprite );
                    // instead of: - but it does not work not sprite shown on screen
                    theScratcher = new ExplodeScratcher( _assetGenerator, _mainSprite );
                    theScratcher.setBack( currentNameArray[index] );                    
                    sourceArray.push( theScratcher );

                    if ( _globalArray[iArea][4] == OPENEDAREA ) {
                        theScratcher.auto();
                    }
                }

Ответы [ 3 ]

2 голосов
/ 15 июля 2010

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

Входные данные для getDefinitionByName всегда должны быть строкой формата "package.subpackage.subpackage :: Class", поэтому:

var MyClass:Class = getDefinitionByName("packageA.packageB::ClassName") as Class;
var myInstance:Object = new MyClass();

Обратите внимание, что Flash не будет включать ClassName в ваш фильм, если он специально не указан где-то в вашем коде.Чтобы избежать этого, поместите это где-нибудь в основной раздел кода:

var MyClass:ClassName;
0 голосов
/ 15 июля 2010

Если вы связываете пользовательский класс, вы когда-нибудь пытались добавить «импорт»? Или, если вы рассматриваете пользовательский класс как общие библиотеки времени выполнения, вы можете вместо этого использовать ApplicationDommain.getDefinition ().

0 голосов
/ 15 июля 2010

Да, он работает с пользовательскими классами.Просто убедитесь, что SWF знает о классе, ссылаясь на него где-то в коде, чтобы его определение было включено во время компиляции.Если вы нигде не используете класс в своем коде, его определение не будет скомпилировано в SWF, и, следовательно, вы не сможете прочитать его обратно.Если вы используете его где-то, вот как это использовать:

var t:Object;
var type:Class = getDefinitionByName("packageA.packageB.ClassName") as Class;
if(!type)
  trace("can't find the definition");
else
  t = new type(/* arguments to the constructor*/);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...