Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   импорт мувиклипа из библиотеки по имени массива (http://www.flasher.ru/forum/showthread.php?t=139263)

gashhik 26.04.2010 23:46

импорт мувиклипа из библиотеки по имени массива
 
День добрый. В АС3 я пока не очень и нужна ваша помошь, дорогие знатоки.

Ситуация такая - есть поверхность на которую я подтягиваю из библиотеки своего героя игры (hero) и дублирую для тестирования коллизий с поверхностью.

Код AS3:

        private function init(e:Event=null):void {
                _collisionList=new CollisionList(terrain);
                _CharsArray=[];
                for (var i:uint=0; i<4; i++) {;
                        var chars:hero=new hero  ;
                        _CharsArray.push(chars);
                        addChild(chars);
                        _collisionList.addItem(chars);
                }
        }

Теперь я хочу не дублировать героя, а поставить героя и других персонажей на карту с разными координатами. Для этого я создаю два массивчика: один с именами персонажей в библиотеке, а другой с соответствующими им координатами по горизонтали.

_namesArray=["myhero","fish","turbo"];
_xArray=["400","800","1100"];

Теперь я хочу перебирая элементы массива ставить на карту персонажей с соответствующими именами из библиотеки. Но у меня не получаеться :(
Делаю так:

Код AS3:

        private function init(e:Event=null):void {
                _collisionList=new CollisionList(terrain);
 
                _CharsArray=[];
                _namesArray=["myhero","fish","turbo"];
                _xArray=["400","800","1100"];
 
                for (var i:uint=0; i<_namesArray.length; i++) {
                        var names=_namesArray[i];
                        var chars:MovieClip=new names  ;                       
                        chars.x=_xArray[i];
                        _CharsArray.push(chars);
                        addChild(chars);
                        _collisionList.addItem(chars);
                }
}

Вообщем я понимаю, что я не прописал что-то, но не знаю, что...

Подскажите, что прописать, что бы элемент массива считался мувиклипом и подтягивался из библиотеки.

udaaff 26.04.2010 23:49

getDefinitionByName()

mickfallout 27.04.2010 00:08

я делаю это так:
Код AS3:

                static private var MovieClipsClassesObject:Object = { };// хранилище всех классов MovieClip'ов использованных в функции newMovieClip
                static public function newMovieClip(imageName:String):MovieClip        //создает MovieClip по имени в ресурсах
                {
                        var movieClipsClass:Class;
                        if (MovieClipsClassesObject[imageName] != null )        //если в хранилище MovieClip'ов под таким именем уже что-то есть
                        {
                                //trace("requested mc "+imageName+", give out from MovieClipsClassesObject")
                                movieClipsClass = MovieClipsClassesObject[imageName];// выдаем класс MovieClip'а из хранилища
                        }else {
                                //trace("requested new mc "+imageName+", give out from resourcesLoader")
                                movieClipsClass = resourcesLoader.content.loaderInfo.applicationDomain.getDefinition(imageName) as Class; //из resourcesLoader берется описание класса нужного MovieClip'а
                                MovieClipsClassesObject[imageName] = movieClipsClass;          //и записывается в хранилище
                        }
                        return new movieClipsClass();
                }


BlooDHounD 27.04.2010 00:47

gashhik, не в коем случаи не делайте так как делает mickfallout.

gashhik 27.04.2010 01:21

фух мозги уже плавлятся.....

Код AS3:

private function init(e:Event=null):void {
      _collisionList=new CollisionList(terrain);
 
        _CharsArray=[];
        _namesArray=["myhero","fish","turbo"];
        _xArray=["400","800","1100"];
 
        for (var i:uint=0; i<_namesArray.length; i++) {
                var names=_namesArray[i];
                      //trace(names+" class: "+getQualifiedClassName(names));       
                      var names:Class=getDefinitionByName("myhero") as Class;
                var chars:MovieClip=new names  ;                       
                chars.x=_xArray[i];
                _CharsArray.push(chars);
                addChild(chars);
                _collisionList.addItem(chars);
                }
}

Ошибка:
Код AS3:

TypeError: Error #1034: Type Coercion failed: cannot convert "myhero" to Class.

Я должен тот класс на который я ссылаюсь как то по особенному обработать?

derhab 27.04.2010 01:36

Код AS3:

private function init(e:Event = null):void {
 
      _collisionList = new CollisionList(terrain);
 
        _CharsArray = [];
        _namesArray = ["myhero","fish","turbo"];
        _xArray = ["400", "800", "1100"];
 
        var len:int = _namesArray.length;
 
        for (var i:int = 0; i < len; i++) {
 
                var charClass:Class = getDefinitionByName(_namesArray[i]) as Class;
                var char:MovieClip = new charClass()  ;                       
                char.x =_xArray[i];
                _CharsArray.push(char);
                addChild(char);
                _collisionList.addItem(char);
 
        }
 
}


gashhik 27.04.2010 01:45

Спасибо тебе добрый человек!!1 РАБОТАЕТ :-*

Wolsh 27.04.2010 02:20

А что мешало хранить в массиве классы, а не строки с их именами?

derhab 27.04.2010 02:41

Цитата:

Сообщение от Wolsh (Сообщение 903921)
А что мешало хранить в массиве классы, а не строки с их именами?

всмысле хранить в массиве уже созданные экземпляры классов?
типа:
Код AS3:

[new myhero(), new fish(), new turbo()];


gashhik 27.04.2010 02:44

Не понимаю...
Как вы это видите в коде?
Код AS3:

_namesArray = ["myhero:MovieClip","fish:MovieClip","turbo:MovieClip"]

типа так?


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

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