Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Можно ли менять name у загружаемого swf (http://www.flasher.ru/forum/showthread.php?t=106818)

Sem3D 19.01.2008 16:14

Можно ли менять name у загружаемого swf
 
Можно ли менять name у объекта MovieClip в загруженном swf? По умолчанию ему присваивается что-то типа instance38.

Mr. Fixit 19.01.2008 16:40

попробуйте

Sem3D 19.01.2008 21:13

2Mr.Fixit
"Можно" - это имеется ввиду "Как" :rtfm:
Естественно я пробовал. Напрямую никак.
Код:

Error #2078: The name property of a Timeline-placed object cannot be modified.
Может как-то по другому можно?

etc 19.01.2008 21:16

А что мешает в IDE поменять имя?

Sem3D 19.01.2008 21:20

А это где и как?

etc 19.01.2008 21:23

В CS3 на панели свойств клипа.

Sem3D 19.01.2008 21:35

Нет. Мне нужно поменять name в загруженном внешнем swf.
1. Я создаю отдельный test.swf
2. Загружю его в loader.swf
3. Внутри loader.swf он имеет name = instant38.
Могу я это instant38 пом енять на другое?

etc 19.01.2008 21:39

Нет, конкретно это имя поменять нельзя. А зачем?

Sem3D 19.01.2008 21:45

Ну хочется, чтобы загруженный мувик был с удобным именем.
Может к нему потом как-нибудь обратиться нужно.
А оно еще и меняться будет (instant40 например).

etc 19.01.2008 22:02

У LoaderInfo есть свойство content, а уж завести себе поле в классе вообще проблемы не представляет. Не понимаю, зачем вам вообще name.

Sem3D 22.01.2008 21:11

Тогда следующий вопрос:
В клип MainClip загружаю внешний файл Ext.swf в котором есть клип clip1.
Как мне обратиться к клипу clip1 из клипа MainClip после загрузки?
Получается цепочка MainClip.instanceXX.clip1 и instanceXX не постоянно и может менятся.

И ещё. Если будет предложение что-то типа:
Код:

var ldr:Loader = new Loader();
...
var mc:MovieClip = ldr.loaderInfo.content;
MainClip.mc.clip1.x = 100;

Тогда вопрос, можно ли брать имя переменной (здесь это mc) из какой нибудь текстовой переменной.

BlooDHounD 22.01.2008 21:41

мдя ... не получается цепочки.

content.getChildByName("clip1");

Sem3D 22.01.2008 22:28

2BlooDHounD
content.getChildByName("clip1"); - это к чему?
Ты же видишь, что я новичок. Нужно подробней :)
Если так добраться до clip1, то я просил из MainClip.
Если это пример текстовой переменной, то я просил mc
Что-то типа: MainClip[mc_str].clip1

Нужно, чтобы забыть про ldr и обращаться как-то по другому.

etc 22.01.2008 22:41

getChildAt не катит?

BlooDHounD 22.01.2008 23:05

Код:

var mc:DisplayObjectContainer = ldr.content as DisplayObjectContainer;
mc.getChildByName("clip1");


Sem3D 22.01.2008 23:05

:wacko:
Нет. Что то я наверно не так объясняю :umnik2:
Я хочу из главного клипа MainClip обращаться к clip1, который находится в загруженном. (который загрузили в MainClip). Сейчас обращаюсь через ldr (content и т.д.). Как заменить ldr на что нибудь другое (типа ExtClip) и обращаться просто MainClip.ExtClip.clip1

2BlooDHounD
Да что-то наподобии, но еще чтобы имя (которое mc) бралось из текстовой переменной

etc 22.01.2008 23:22

Используйте статические члены класса. Только к clip1 можно обращаться только через getChildByName. Обращение по имени напрямую возможно лишь при использовании компилятора CS3 и нативно отрисованных на сцене мувиков, не стоит это применять.

DRAGOnoid 23.01.2008 02:10

Sem3D
слуша, а как ты вообще умудрился так добавить загруженный swf, чтобы он был как instanceXX? обычный addChild чтоли?
тогда вообще не понимаю почему нельзя сделать так:
Код:

var info:LoaderInfo  = event.target as LoaderInfo;
this.MainClip.ExtClip = new Object(info.content);


etc 23.01.2008 02:14

Цитата:

Сообщение от DRAGOnoid
не понимаю почему нельзя сделать так:
Код:

var info:LoaderInfo  = event.target as LoaderInfo;
this.MainClip.ExtClip = new Object(info.content);


Осталось расшифровать, что означает сей многозначительный код, особенно втоая строка.

DRAGOnoid 23.01.2008 02:50

я писал условно, я ж его кода не вижу.
если у него загрузчик в основном конструкторе и там же находится этот MainClip, то пусть в нём создаёт объект ExtClip ссылающийся на загруженный SWF.
по крайней мере я примерно так и делаю =) правда выглядит нескольки иначе.
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        public class TestLoader {
                public var MainClip:Sprite;
                public var loader:Loader;

                public function TestLoader        ():void {
                        this.loader = new Loader();
                        this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,        completed);
                }
                private function complete        (event:Event):void {
                        var info:LoaderInfo = event.target as LoaderInfo;
                        this.MainClip = new Object(info.content);
                        this.addChild(this.MainClip);
                }
        }
}

таким образом this.MainClip - у меня загруженный клип, куда хочу туда и добавляю, и обращаться к нему легко.
в общем я к тому спрашиваю что не понимаю к чему такие сложности ;)

etc 23.01.2008 02:52

Конструктор Object не принимает никаких аргументов, а свойство MainClip (почему название с большой буквы?) вообще имеет тип Sprite, а не Object.

2morrowMan 23.01.2008 03:26

Цитата:

Сообщение от DRAGOnoid
я писал условно, я ж его кода не вижу.
если у него загрузчик в основном конструкторе и там же находится этот MainClip, то пусть в нём создаёт объект ExtClip ссылающийся на загруженный SWF.
по крайней мере я примерно так и делаю =) правда выглядит нескольки иначе.
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        public class TestLoader {
                public var MainClip:Sprite;
                public var loader:Loader;

                public function TestLoader        ():void {
                        this.loader = new Loader();
                        this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,        completed);
                }
                private function complete        (event:Event):void {
                        var info:LoaderInfo = event.target as LoaderInfo;
                        this.MainClip = new Object(info.content);
                        this.addChild(this.MainClip);
                }
        }
}

таким образом this.MainClip - у меня загруженный клип, куда хочу туда и добавляю, и обращаться к нему легко.
в общем я к тому спрашиваю что не понимаю к чему такие сложности ;)

Ууу, жесть...

Всегда делал типа так(изменил твой пример):
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        public class TestLoader {
                public var mainClip:DisplayObject;

                public function TestLoader        ():void {
                        var loader:Loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE,        completed);
                        loader.load(new URLRequest("your_url_here"));
                }
                private function complete        (event:Event):void {
                        var info:LoaderInfo = event.target as LoaderInfo;
                        this.mainClip = info.content as DisplayObject;
                        if (this.mainClip) this.addChild(this.mainClip);
                }
        }
}


DRAGOnoid 23.01.2008 03:39

Вложений: 1
Цитата:

Сообщение от __etc
Конструктор Object не принимает никаких аргументов

ик? О___О
Цитата:

Сообщение от __etc
а свойство MainClip (почему название с большой буквы?)

извини так назвал его хозяин поста а не я.
Цитата:

Сообщение от __etc
вообще имеет тип Sprite, а не Object.

да просто торопился забыл поправить на MovieClip :rolleyes:

а вообще вот рабочая версия того что я подразумевал. там же закоментировал что имел ввиду.

З.Ы. - залейте наконец для архивов rar иконку на сайт :rolleyes:

Sem3D 23.01.2008 12:53

Большое всем спасибо.
Помоему это то что мне нужно. :yahoo:
Сейчас буду пробовать.

2__etc
Названия переменных нужно писАть с маленькой буквы?

etc 23.01.2008 13:01

Цитата:

Сообщение от Sem3D
Названия переменных нужно писАть с маленькой буквы?

Обязательно.

Sem3D 23.01.2008 13:11

А насчет выбора имени переменной? ...

etc 23.01.2008 13:25

А зачем? Вы понимаете разницу между свойством name клипа и именем переменной-ссылки на этот клип?

Sem3D 23.01.2008 13:34

Цитата:

Сообщение от __etc
А зачем? Вы понимаете разницу между свойством name клипа и именем переменной-ссылки на этот клип?

Уже все понял. Вопрос удалил.

etc 23.01.2008 13:40

Удалять не надо было, из-за удаления смысл в постах потерялся. Пусть висит.

Sem3D 23.01.2008 14:18

Вот что получилось в итоге, вроде работает:
Код:

private function completeHandler(event:Event):void {
  this.mainClip["extClip"] = event.target.content as MovieClip
  this.mainClip.addChild(this.mainClip["extClip"]);
  trace(this.mainClip.extClip);          // [object MovieClip]
  trace(this.mainClip.extClip.clip1);    // [object clip1]
}


etc 23.01.2008 15:44

Не обращайтесь к клипам через свойства, используйте getChildByName.

Sem3D 23.01.2008 20:45

Цитата:

Сообщение от __etc
Не обращайтесь к клипам через свойства, используйте getChildByName.

Почему?

etc 23.01.2008 22:49

Потому что чистый AS3 не допускает подобных обращений. Компилятор добавляет в код новые публичные поля, что недопустимо.

Sem3D 24.01.2008 13:58

Следующий вопрос.
Могу я вызвать процедуру находящуюся в классе mainClip из подгруженного в него клипа extClip?
И как это сделать (примерчик)?
Из extClip я вижу только его root.

DRAGOnoid 24.01.2008 17:02

Sem3D
блин ты на форуме хоть искать пробовал?
такие вещи раз десять уже обсуждались.
Давай сам уже копай.

Sem3D 24.01.2008 18:17

2DRAGOnoid
Я искал. Не получилось. Все не то.
Если не влом кинь тогда хоть ссылку.

Sem3D 24.01.2008 19:45

И еще. mainClip не видит никаких переменных и процедур в extClip.

mainClip.as
Код:

package main {

    dynamic public class mainClip extends MovieClip {
               
            public function mainClip() {
                       
        }

        . . .
       
              private function completeHandler(e:Event):void {
              root.mc.addChild(e.target.content as MovieClip);              // добавили клип extClip
            root.mc.ec = e.target.content as MovieClip;                // создали ссылку на клип
            root.mc.ec.SetRoot(root);          // Error #1069: Property SetRoot not found ...
        }
    }
}

extClip.as
Код:

package main {

    dynamic public class extClip extends MovieClip {
               
        public var mainRoot:*;

            public function extClip() {
                       
        }
               
        public function SetRoot(r:*):void {
                mainRoot = r;
        }
    }
}


Mr. Fixit 24.01.2008 19:51

где ты вызываешь класс ексКлип?

Sem3D 24.01.2008 20:18

Прошу прощения. Последний пост работает.
Это я тормознул :rolleyes:

IONIX 16.01.2010 15:54

всё равно не понял как это сделать 8(

можно пример? как загрузить мувик присвоив ему удобное имя
обращаться к объектам на сцене


Часовой пояс GMT +4, время: 18:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.