Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Добавление внешних объектов на isoScene (http://www.flasher.ru/forum/showthread.php?t=194803)

Kaje 22.02.2013 18:34

Добавление внешних объектов на isoScene
 
Создал сцену ( isoScene ) и добавил на неё сетку при помощи библиотеки as3isolib (actionScript 3), Все работает отлично, но когда загружаю внешний файл (карту в формате *.swf), то при добавлении карты как ребенка ( addChild() ) к этой изометрической сцене выбивает ошибку " Неявное приведение значения типа Flash.Display:loader к несоответствующему типу as3isolib.data:iNode ". Если делать addChild просто к сцене, то карта нормально добавляется, но при перетаскивании сцены, она не шевелится. Подскажите, может както конвертировать надо или приём какой применить чтобы добавить объект в IsoScene?



Код AS3:

package src 
{
        import as3isolib.geom.Pt;
        import flash.display.Loader;
        import flash.display.MovieClip;
        import as3isolib.display.scene.IsoGrid;
        import as3isolib.display.primitive.IsoBox;
        import as3isolib.display.scene.IsoScene;
        import as3isolib.display.IsoView;
        import as3isolib.graphics.SolidColorFill;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.net.URLRequest;
 
 
        /**
        * ...
        * @author KajeNick
        */

 
        public class Map extends MovieClip
        {
 
                private var grid:IsoGrid;
                private var scene:IsoScene;
                private var viewPort:IsoView;
                private var loader:Loader;
 
                public function Map()
                {                       
 
                        viewPort = new IsoView();
                        viewPort.setSize(800, 600); //размер карты
                        viewPort.centerOnPt(new Pt(0, 0, 0), false); //отступ от краев экрана  resource/maps/map1.swf
                        addChildAt(viewPort, 0);
                        viewPort.addEventListener(MouseEvent.MOUSE_DOWN, onStartPan, false, 0, true); //таскать карту туда сюда
 
                        var loader:Loader = new Loader();
                        loader.load(new URLRequest("resource/maps/map1.swf"));                       
                        addChildAt(loader, 0);
 
                        scene = new IsoScene();
 
                        viewPort.addScene(scene);
                        viewPort.addChild(loader);               
 
                        grid = new IsoGrid();
                        grid.setGridSize(16, 16, 1);
                        grid.cellSize = 30;
                        grid.showOrigin = false;
 
                        scene.addChild(grid);       
 
 
                        viewPort.addChildAt(loader, numChildren - 1); //ставим землю ниже сетки
 
 
            addEventListener(Event.ENTER_FRAME, onRender, false, 0, true);
                }
 
                private function onRender(e:Event):void
        {
 
            scene.render();
        }
 
                //перемещение карты
                private var panPt:Pt;
                private function onStartPan(e:MouseEvent):void
        {
            panPt = new Pt(stage.mouseX, stage.mouseY);
 
            viewPort.removeEventListener(MouseEvent.MOUSE_DOWN, onStartPan);
            viewPort.addEventListener(MouseEvent.MOUSE_MOVE, onPan, false, 0, true);
            viewPort.addEventListener(MouseEvent.MOUSE_UP, onStopPan, false, 0, true);                       
 
        }
 
        private function onPan(e:MouseEvent):void
        {
            viewPort.panBy(panPt.x - stage.mouseX, panPt.y - stage.mouseY);
            panPt.x = stage.mouseX;
            panPt.y = stage.mouseY;
        }
 
        private function onStopPan(e:MouseEvent):void
        {
            viewPort.removeEventListener(MouseEvent.MOUSE_MOVE, onPan);
            viewPort.removeEventListener(MouseEvent.MOUSE_UP, onStopPan);
            viewPort.addEventListener(MouseEvent.MOUSE_DOWN, onStartPan, false, 0, true);
        }
                // конец перемещения карты
 
        }
 
}


yasha005 23.02.2013 13:35

Всё верно, что выдаёт ошибку.

Вы пытаетесь объект типа лоадэр добавить в список отображения. В то время как в список отображения можно поместить только объекты типа DisplayObject. Другими словами, вывести на экран загрузчик нельзя, а можно только сам контент, который для начала нужно загрузить, и послушать лоадер на предмет загрузки. И только после того как загрузка произошла, помещать в список отображения контент, который загрузил лоадер, а не сам лоадер.

spirit2 23.02.2013 13:51

Цитата:

Сообщение от yasha005 (Сообщение 1122035)
Всё верно, что выдаёт ошибку.

Вы пытаетесь объект типа лоадэр добавить в список отображения. В то время как в список отображения можно поместить только объекты типа DisplayObject. Другими словами, вывести на экран загрузчик нельзя, а можно только сам контент, который для начала нужно загрузить, и послушать лоадер на предмет загрузки. И только после того как загрузка произошла, помещать в список отображения контент, который загрузил лоадер, а не сам лоадер.

http://help.adobe.com/ru_RU/FlashPla...ay/Loader.html

iflamberg 23.02.2013 16:04

Нее... Лоадер тут не причем. Вернее отчасти не причем. Судя по всему isoScene в параметрах функции addChild ожидает объект, реализующий интерфейс iNode. Соотсветсвтенно, чтобы загруженный мувик отобразить, вам нужно loader ваш обернуть в объект, реализующий этот самый интерфейс iNode.

iNils 23.02.2013 20:00

Вопросы по API сторонних библиотек задаются в разделе "API приложений и сред"


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

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