![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 17
|
Есть такой код:
package ru.alice { import flash.display.MovieClip; import flash.display.Sprite; import flash.utils.getDefinitionByName; public class Symbols extends MovieClip { [Embed(source="../../../bin/games/game1/sym/regular/fall/0.swf", mimeType="application/octet-stream")] public const game1RF0:Class; [Embed(source="../../../bin/games/game1/sym/regular/fall/1.swf",mimeType="application/octet-stream")] public const game1RF1:Class; [Embed(source="../../../bin/games/game1/sym/regular/fall/2.swf",mimeType="application/octet-stream")] public const game1RF2:Class; //тут много-много embed кода public function Symbols() { } public function getAsset2(n:String):Sprite { var ClassReference:Class = getDefinitionByName(this[n]) as Class; var s:Sprite = new Sprite(); var m:MovieClip = new ClassReference() as MovieClip; s.addChild(m); return s; } } } myAppDomain = new ApplicationDomain(); var context:LoaderContext = new LoaderContext(false, this.myAppDomain); var my_Loader:Loader = new Loader(); var my_url:URLRequest = new URLRequest("Symbols.swf"); my_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingHandler); my_Loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); my_Loader.load(my_url, context); //.... private function loadingHandler(e:Event):void { var ClassDefinition:Class = this.myAppDomain.getDefinition("ru.alice.Symbols") as Class; smbc = new ClassDefinition(); //тут в отладчике видно, что файл загрузился,весь embed есть. var mc = smbc.getAsset2("game1RF0") //тут ошибка №1065 } ReferenceError: Error #1065: Переменная [class Symbols_game1RF0] не определена. at global/flash.utils::getDefinitionByName() at ru.alice::Symbols/getAsset2() at ru.alice::Spin3/loadingHandler()[K:\FD\Projects\ALiCEv2\src\ru\alice\Spin3.as:153] "../../../bin/games/game1/sym/regular/fall/0.swf" - это мувик с элементами AS3. "game1RF0" - получается в процессе работы программы, типа "имя_игры" + "режим1" + "режим2" + "№ ресурса". Вопрос, что я делаю не так, и как сделать так, чтобы оно работало? |
|
|||||
|
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Embed загружает контент при компиляции, его не нужно загружать лоадером, т.к. он уже загружен.
Что же касается выдаваемой ошибки компилятором: тот факт, что вы объявили тип переменной и указали флэшу в каком месте искать данные такого типа, ещё не означает, что переменная содержит какое-то значение до тех пор пока вы ей это значение не присвоите. В данном случае нужно присвоить свойству, экземпляр класса, соответствующему типу этого свойства. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
getDefinitionByName() принимает аргументом Строку (n), а Вы отдаете Класс (this[n]). Тот, который ищете.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 17
|
n я пробовал, ошибка та же
Добавлено через 3 минуты Цитата:
Последний раз редактировалось HraD; 27.02.2013 в 00:27. Причина: Очепятки |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
.
|
Скорее к аппдомену, нежели только к документклассу.
Добавлено через 3 минуты getDefinitionByName работает только для текущего (корневого) аппдомена текущего security домена и имеет его контекст. Используйте getDefinition взамен. |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 17
|
Ну не совсем та же...
ReferenceError: Error #1065: Переменная game1RF0 не определена. at global/flash.utils::getDefinitionByName() at ru.alice::Symbols/getAsset2() at ru.alice::Spin3/loadingHandler()[K:\FD\Projects\ALiCEv2\src\ru\alice\Spin3.as:153] Цитата:
Например http://stackoverflow.com/questions/1...m-external-swf А почему нет, если там просто мувик в swf? Цитата:
Цитата:
В коде public function getAsset2(n:String):Sprite { var ClassReference:Class = getDefinition(n) as Class; var s:Sprite = new Sprite(); var m:MovieClip = new ClassReference() as MovieClip; s.addChild(m); return s; } или я что-то опять не понял.... П.С. Это уже пост после 2-х дневного перелопачивания гугла, StackerOverflow и подобных сайтов, перепробовал около 10-ти разных вариантов... незнаю уже... Последний раз редактировалось HraD; 27.02.2013 в 00:32. Причина: погорячился |
|
|||||
|
.
|
Вы даже не удосужились загуглить чей метод getDefinition? Подскажу, это метод экземпляров ApplicationDomain. Его брать у экземпляра LoaderInfo вашего Loader, которым делаете loadBytes
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вот здесь попробуйте "погуглить"...
__________________
Reality.getBounds(this); |
|
|||||
|
.
|
Помимо того, что getDefinitionByName работает только в текущем аппдомене, в параметре необходимо указывать полный путь к классу а ля "flash.display::Sprite". В конце концов, за два дня уже можно было прочитать официальную адобе справку )
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:46. |
|
|
« Предыдущая тема | Следующая тема » |
|
|