|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2013
Адрес: 48.072602,39.492073
Сообщений: 1
|
Добавление внешних объектов на isoScene
Создал сцену ( isoScene ) и добавил на неё сетку при помощи библиотеки as3isolib (actionScript 3), Все работает отлично, но когда загружаю внешний файл (карту в формате *.swf), то при добавлении карты как ребенка ( addChild() ) к этой изометрической сцене выбивает ошибку " Неявное приведение значения типа Flash.Display:loader к несоответствующему типу as3isolib.data:iNode ". Если делать addChild просто к сцене, то карта нормально добавляется, но при перетаскивании сцены, она не шевелится. Подскажите, может както конвертировать надо или приём какой применить чтобы добавить объект в IsoScene?
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); } // конец перемещения карты } } |
|
|||||
[+1 16.03.13]
[+1 22.03.13] Регистрация: Dec 2012
Сообщений: 100
|
Всё верно, что выдаёт ошибку.
Вы пытаетесь объект типа лоадэр добавить в список отображения. В то время как в список отображения можно поместить только объекты типа DisplayObject. Другими словами, вывести на экран загрузчик нельзя, а можно только сам контент, который для начала нужно загрузить, и послушать лоадер на предмет загрузки. И только после того как загрузка произошла, помещать в список отображения контент, который загрузил лоадер, а не сам лоадер. |
|
|||||
Регистрация: Dec 2009
Сообщений: 125
|
Цитата:
|
|
|||||
Регистрация: Jan 2009
Сообщений: 1,651
|
Нее... Лоадер тут не причем. Вернее отчасти не причем. Судя по всему isoScene в параметрах функции addChild ожидает объект, реализующий интерфейс iNode. Соотсветсвтенно, чтобы загруженный мувик отобразить, вам нужно loader ваш обернуть в объект, реализующий этот самый интерфейс iNode.
__________________
мой пустой блог |
Часовой пояс GMT +4, время: 15:41. |
|
« Предыдущая тема | Следующая тема » |
|
|