![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Объясняю ситуацию:
Спасибо. Последний раз редактировалось Stary; 20.09.2011 в 22:16. |
|
|||||
|
после упражнений с бубном выяснилось, что у второй и следующих подгруженных AVM1 флешек напрочь отсутствует ссылка на _root: вот ведь действительно бред
но _url вполне себе определяется, т.е. если брать его и самому парсить, то можно эти гет данные взять тестовый расклад AS3 public class Main extends Sprite { private var loader:Loader = new Loader(); public function Main():void { addChild(loader); stage.addEventListener(MouseEvent.CLICK, stage_click); } private function stage_click(e:MouseEvent):void { var par:String = "z" + int(100 * Math.random()); var request:URLRequest = new URLRequest("as2Loader.swf?par=" + par); loader.load(request); } } class MainAS2Loader extends MovieClip { private var tf:TextField; public static function main(swfRoot:MovieClip):Void { swfRoot.__proto__ = MainAS2Loader.prototype; Function(MainAS2Loader).apply(swfRoot); } public function MainAS2Loader() { tf = createTextField("tf", 0, 10, 10, 300, 200); tf.border = true; tf.text = "par: "+_root["par"];// undefined tf.text += "\nurl: " + _root._url;// undefined tf.text += "\n_root: " + _root;// undefined !! tf.text += "\nthis._url: " + this._url;// работает } } |
|
|||||
|
Ух ты. Звучит многообещающе. Попробую обязательно. Спасибо!
|
|
|||||
|
.
|
ruFlash не помог ) Я вам больше скажу... Связка AS2+AS3 непобедима в своих глюках. Я смог менять свойства визуальных объектов AVM2 из кода AS2, обращаясь к аналогам, имеющимся в языке AS2.
Например, можно изменить прозрачность DisplayObject используя сл. конструкцию: _root._parent._parent._alpha = value; Однако _root._parent._parent.alpha = value не работал. Аналогично работают _x и _y. Удачи. |
|
|||||
|
Ага. А у меня код из AVM1 меняет родительский Stage.scaleMode
![]() Цитата:
2 silin Дяденька, объясни что сие шаманство означает. Не дай прозябать в невежестве! public static function main(swfRoot:MovieClip):Void { swfRoot.__proto__ = MainAS2Loader.prototype; Function(MainAS2Loader).apply(swfRoot); } Добавлено через 5 минут 2 silin Да, и кстати. А нельзя ли теперь так же |
|
|||||
|
да не шаманство никакое, как бы имитация документ класса для AS2
static main - mtasc'вская точка входа с рутом в параметре swfRoot.__proto__ наследование этого рута от своего класса Function(MainAS2Loader).apply(swfRoot); - вызов конструктора т.е. this в этом контексте и есть _root, он же _level0 а вот с остальными _levelN пробовать надо, можно ли вообще туда что-то положить в этой ситуации неизвестно |
|
|||||
|
Все равно колдунское колдунство.
Не посоветуете что-нибудь доходчивое почитать про функцию main? Можно на аглицком. Что делать, если я не использую MTASC или если собираю проект без помощи main (actually I do, но чисто теоретически)? Сейчас буду проверять что происходит с рутами следующих загружаемых as2-файлов. Означает ли это все, что их тоже придется переписывать? Добавлено через 4 часа 9 минут Вот зараза! Все flashvars подхватил. Все в порядке. В первый раз игра грузится и все ок. Во второй раз - с уже новыми параметрами пытаюсь грузить игру, и нифига. Даже запрос не проходит через Charles. Единственная разница, которую я смог заметить: мувиклип-контейнер для дальнейшей загрузки раньше создавался в _root, а теперь - за неимением рута - в this. var mgLoader: MovieClipLoader = new MovieClipLoader(); mTargetMc = this.createEmptyMovieClip("targetMc", 1); trace("mTargetMc=" + mTargetMc); mgLoader.loadClip(mMiniGameUrl, mTargetMc); mTargetMc=_root.targetMc При повторной загрузке: mTargetMc=_level0.instance6.instance132.ApplicationLayer.hBox1.rightVBox.mgpanel.instance153.instance29405.instance29467.instance29468.targetMc Короче, прикрепило его куда-то в недра Loader-а, который я выкладываю на сцену. Пробовал прикреплять к имени файла-лоадера префикс с итератором. Чтобы оно, как бы, грузило разные файлы, в то время как файлы одинаковые (для начала просто накопировал нужное количества файлов с соотв. префиксами). Но это не работает! Выходит, что не уничтожается не файл SWF, а сам класс из AVM1! Что бы еще сделать? Вытащить из Loader-а контент и положить на сцену его? Что-то мне подсказывает, что это не поможет. Последний раз редактировалось Stary; 22.09.2011 в 14:57. |
|
|||||
|
я похоже потерял нить,в чем затык теперь
какая разница куда лоадер засунул твой клип, важно что он обновляется с новыми флешварсами, только взять их можно не через _root или _level0, а через this на основном таймлайне, не ? можно наверно и _global._root ему переопределить, если на _root что-то завязано.. mtasc'ский main и выверты с рутовым классом здесь не при делах совсем, просто рабочий темплет, ну и запостил как есть, во избежание |
|
|||||
|
Цитата:
Цитата:
Добавлено через 27 минут Ну, точнее говоря, получилось вот так в конструкторе написать: В трейсе вывелось в первый раз: 14:4:482: # _level0 = _root 14:4:483: # _root = _root Во второй раз: 14:4:64: # _level0 = _level0.instance6.instance121.ApplicationLayer.hBox1.rightVBox.mgpanel.instance153.instance22489.instance22558.instance22559 14:4:64: # _root = _root Добавлено через 31 минуту Забыл добавить, что это все равно не помогло. Добавлено через 43 минуты Цитата:
Последний раз редактировалось Stary; 22.09.2011 в 16:06. |
|
|||||
|
такой нюанс еще: возможно все дело в MTASC' е
стал проверять флешки, скомпиленные в flash IDE, а там нет трабла с потерей рута и соответственно флешварсов смотрел так as2Loader trace("as2Loader>> par: " +_root["par"]);// z80, ну и всякие var mgLoader:MovieClipLoader = new MovieClipLoader(); var mTargetMc:MovieClip = this.createEmptyMovieClip("targetMc", 1); trace("as2Loader>> mTargetMc : " + mTargetMc);// _root.targetMc mgLoader.loadClip("as2Loadee.swf", mTargetMc); подгруженная флешка правда _level0.par не видит, но с этими уровнями, когда флешка не в плеере, а в AVM2-лоадере вообще мутно все |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|