Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   азы работы с as3isolib, как справиться с ошибкой? (http://www.flasher.ru/forum/showthread.php?t=187055)

Маруська 12.11.2012 21:33

азы работы с as3isolib, как справиться с ошибкой?
 
Здравствуйте!
наверняка, не в эту тему нужно, но даже не знаю, куда
Сегодня с утра пытаюсь вникать в азы создания изометрических флеш-приложений посредствам библиотек as3isolib.
По двум распространённым в сети урокам добилась создания карты, разместила 1 дополнительный Sprite, который должен переноситься на scene в место клика мышкой (работал странно - переносил только в позицию 0,0)
потом добавила ещё один спрайт (в коде ошибок не было) - и появилась ошибка компиляции:

Error: skin asset is not of the following types: BitmapData, DisplayObject, ISpriteAsset, IFactory or Class cast as DisplayOject.

Отменила все изменения до последней сработавшей версии - ошибка продолжает появляться. не пойму - что случилось?

Ну и ещё просьба: если знаете хорошие уроки по работе в builder с движком as3isolib - дайте, пожалуйста, ссылки.

скрипт:
package
Код AS3:

{
        import as3isolib.display.IsoSprite;
        import as3isolib.display.IsoView;
        import as3isolib.display.primitive.IsoBox;
        import as3isolib.display.scene.IsoGrid;
        import as3isolib.display.scene.IsoScene;
        import as3isolib.geom.IsoMath;
        import as3isolib.geom.Pt;
 
        import eDpLib.events.ProxyEvent;
 
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
 
        [SWF(width='800', height='600', backgroundColor='#000000', framerate='30')]
 
        public class Iso extends Sprite
        {
                private static const CELL_SIZE:Number=50;
 
                private var grid:IsoGrid;
                private var scene:IsoScene;
                private var view:IsoView;
                private var pole:IsoSprite;
                private var iso:IsoSprite
 
                public function Iso ()
                {
                        grid = new IsoGrid();
                        grid.setGridSize(8,8,1);
                        grid.cellSize= CELL_SIZE;
                        grid.showOrigin=false;
                        grid.addEventListener(MouseEvent.CLICK,gridClick);
 
                        scene = new IsoScene();
                        scene.addChild(grid);
 
                        for (var i:int =0; i<8; i++)
                        {
                                for (var j:int =0; j<8; j++)
                                {        iso = new IsoSprite();
                                        iso.sprites=[grass];
                                        if (Math.random()<0.7)
                                                iso.sprites=[grass];
                                        if (Math.random()>=0.7 && Math.random()<0.8)
                                                iso.sprites=[grass2];
                                        if (Math.random()>=0.8 && Math.random()<0.9)
                                                iso.sprites=[grass3];
                                        if (Math.random()>=0.9)
                                                iso.sprites=[grass4];
                                        iso.moveBy(j*50,i*50,0);
                                        scene.addChild(iso);
                                        //switch (Math.random()*10)            //кстати, подскажите,
                                        //case 0,1,2,3:iso.sprites=[grass];    //как здесь правильно
                                        //case 4,5,6:iso.sprites=[grass2];      //организовать switch
                                        //case 7,8:iso.sprites=[grass3];
                                        //case 9:iso.sprites=[grass4];
                                }
                        }
 
                        pole=new IsoSprite();
                        pole.sprites=[grad];
                        pole.moveTo(150,-200,0);                       
                        scene.addChild(pole);
 
 
                        scene.render();
 
                        view= new IsoView();
                        view.setSize(800,600);
                        view.centerOnPt(new Pt(200,200,0))
                        view.addScene(scene);
                        addChild(view);
                }
 
                protected function gridClick(event:ProxyEvent):void
                {
                        var me:MouseEvent= MouseEvent(event.targetEvent);
                        var p:Pt=new Pt(me.localX, me.localY);
                        IsoMath.screenToIso(p);
                        pole.moveTo(Math.floor(p.x/CELL_SIZE)*CELL_SIZE,Math.floor(p.y/CELL_SIZE)*CELL_SIZE,1);
                        scene.render();
                }
        }
}


Sintesis 12.11.2012 21:40

Вы присваиваете спрайт какому-то скину? Этого видимо нельзя делать.

Маруська 12.11.2012 21:43

весь этот скрипт отлично работал, теперь внезапно перестал=(
Skin'ом здесь считается .swf, подключенный для заливки объекта. Это у меня есть и какое-то время всё компилировалось отлично.

Добавлено через 13 минут
полная ошибка:
Error: skin asset is not of the following types: BitmapData, DisplayObject, ISpriteAsset, IFactory or Class cast as DisplayOject.
at as3isolib.display::IsoSprite/renderSprites()[\as3isolib.v1.core\src\as3isolib\display\IsoSprite.as:176]
at as3isolib.display::IsoSprite/renderLogic()[\as3isolib.v1.core\src\as3isolib\display\IsoSprite.as:128]
at as3isolib.core::IsoContainer/render()[\as3isolib.v1.core\src\as3isolib\core\IsoContainer.as:297]
at as3isolib.core::IsoContainer/renderChild()[\as3isolib.v1.core\src\as3isolib\core\IsoContainer.as:357]
at as3isolib.core::IsoContainer/renderLogic()[\as3isolib.v1.core\src\as3isolib\core\IsoContainer.as:343]
at as3isolib.display.scene::IsoScene/renderLogic()[\as3isolib.v1.core\src\as3isolib\display\scene\IsoScene.as:327]
at as3isolib.core::IsoContainer/render()[\as3isolib.v1.core\src\as3isolib\core\IsoContainer.as:297]
at Iso()[\Adobe Flash Builder 4.5\Iso\src\Iso.as:75] - эта строка - размещение сцены в окне просмотра.

Добавлено через 1 час 53 минуты
я, похоже, поняла в чём проблема.
"ошибка версии компилятора. Возможно, необходимоа переустановка приложения" сам билдер выдал
после переустановки - заработало

Добавлено через 3 часа 55 минут
и вот ещё: если однажды проект скомпилировался с ошибкой - как его не исправляй - ошибка продолжит появляться. нужно найти скомпилированный .swf своего проекта - и удалить ;)

Sintesis 13.11.2012 03:14

Попробуйте выбрать компиляцию под другую версию плеера, может as3isolib не подходит для компиляции плеера которая у вас выбрана.

Nbovenko 13.11.2012 16:24

Если запускаете в браузере, нужно чистить кэш (для фф вроде бы можно сделать так, чтобы не сохранял историю) Ну и Project->Clean. Это на всякий случай, если не знали или запамятовали.


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

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