Заставить Starling FrameWork работать с классами, использующими собственный DisplayObject - PullRequest
2 голосов
/ 06 декабря 2011

Я пытаюсь использовать Greensock LoaderMax в проекте Starling Framework, но, поскольку у Starling много собственного класса, как я могу заставить его работать с другими классами, использующими нативный класс?

Опыт:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import starling.core.Starling

    [SWF(width="1280",height="800",frameRate="60",backgroundColor="#002143")]

    public class Main extends Sprite
    {
        private var mStarling:Starling

        public function Main():void
        {
            mStarling = new Starling(Game, stage)
            mStarling.antiAliasing = 1
            mStarling.start()
        }
    }
}

package
{
    import com.greensock.events.LoaderEvent;
    import com.greensock.loading.display.ContentDisplay;
    import com.greensock.loading.SWFLoader;
    import starling.display.Sprite;
    import starling.events.Event;

    public class Game extends Sprite
    {       
        private var queue:SWFLoader
        private var mm:ContentDisplay

        public function Game():void
        {
            if (stage)
                init()
            else
                this.addEventListener(Event.ADDED_TO_STAGE, init)
        }

        private function init(e:Event = null):void
        {
            queue = new SWFLoader("MainMenu.swf", {onComplete: completeHandler})
            queue.load()
        }

        private function completeHandler(e:LoaderEvent):void
        {
            mm = queue.content
            addChild(mm)
        }   
    }
}

вернет ошибку:

 Error: Implicit coercion of a value of type com.greensock.loading.display:ContentDisplay to an unrelated type starling.display:DisplayObject.

1 Ответ

4 голосов
/ 06 декабря 2011

вашему MainMenu.swf основному классу нужно extend starling.display.Sprite

, так как они имеют другую структуру и т. Д. Flash не может преобразовать нативный спрайт в звездный спрайт.

затем после загрузкизавершено:

mm = queue.content as Sprite; // ( starlig )

, если вы все еще хотите использовать обычные объекты DisplayObject и Starling displayObjects, вам нужно поместить их в разные mc / sprites, которые расширяют различные displayObjects.

stage

| ... |

starling.display.Sprite -> Здесь вы добавляете обычные спрайты на основе Starling / мувиклипы

| ... |

flash.display.Sprite -> здесь вы добавляете нативные спрайты / мувиклипы

...