добавлены дети, но объекты не отображаются во Flash - PullRequest
0 голосов
/ 11 мая 2011

Я динамически добавляю серию объектов в мой флэш-фильм из xml, но они не появятся при запуске фильма.У меня есть почти идентичный код, добавляющий объекты в другой SWF, который прекрасно работает.Я протестировал эти 8 способов с воскресенья, включая проверку того, что они были добавлены в контейнер, который является дочерним элементом основного MovieClip (протестировал список отображения), что они были добавлены на stage (имел слушателя для ADDED_TO_STAGE) и что их позиция былаправильно (отображает значения x, y и сравнивает их со значениями mouseX и mouseY).Они находятся в правильном месте в списке отображения.Все еще нет объектов.Класс связан правильно, у меня есть клипы в библиотеке.

Есть идеи, что может быть причиной проблемы?Я чувствую, что все проверил.

'открытый класс MiniMap расширяет MovieClip {

    private var expLoader:LoadXML = new LoadXML("Experiences.xml",true);
    public var expList:XMLList;
    private var popCont:Sprite = new Sprite();
    private var pop:PopUp;
    private var expCont:Sprite = new Sprite();
    private var pnt:Point;
    private var exp:Experiences;


    public function MiniMap()
    {
        // requires mouseup mousedown (pan) and close functions
        //must load experiences which will have their own class
        popCont.name = "popCont";
        expCont.name = "expCont";
        expCont.x = 0;
        expCont.y = 0;
        expCont.visible = true;
        expCont.width = 4000;
        expCont.height = 3000;
        mm.addEventListener(MouseEvent.MOUSE_DOWN, panMap, false, 0, true);
        expLoader.addEventListener("xmlLoaded", onLoadexp);
        mm.addChild(popCont);
        mm.addChildAt(expCont, 2);
    }
    private function onLoadexp(e:Event):void
    {



        expList = new XMLList(expLoader.xml.*);
        trace(expList.Longitude[1]);

        for (var i:int = 0; i < 3; i++)
        {
            exp = new Experiences(expList.Description[i],expList.Experience_Name[i]);
            exp.x = i * 0.5 + 1156;
            exp.y = i*0.75 + 1651;
            exp.name = expList.Experience_ID[i];

            /*exp.x = 1284.3216 * expList.Longitude[i] + 101472.0151;
            exp.y = -1744.6503 * expList.Latitude[i] + 80213.7461;*/

            exp.titl = expList.Experience_Name[i];
            exp.desc = expList.Description[i];

            exp.phourl = expList.photo[i];
            exp.type = expList.County[i];

            switch (exp.type)
            {
                case "City of Kawartha Lakes" :
                    exp.gotoAndPlay("Yellow");
                    break;
                case "Peterborough County" :
                    exp.gotoAndPlay("Green");
                    break;
                case "Northumberland County" :
                    exp.gotoAndPlay("Blue");
                    break;
                case "Northumberland" :
                    exp.gotoAndPlay("Red");
                    break;
            }
            exp.addEventListener(MouseEvent.CLICK, onExpClick, false,0, true);
            exp.addEventListener(Event.ADDED_TO_STAGE, onAdded, false,0, true);

            expCont.addChild(exp);

        }

        trace(expCont.root);

    }



    private function onExpClick(m:MouseEvent):void
    {

        //check for other popups 
        if (popCont.numChildren > 0)
        {
            closePop();
        }

        pop = new PopUp(m.target.titl,m.target.desc);
        pop.closer.addEventListener(MouseEvent.CLICK, closePop);
        mm.popCont.addChild(pop);


    }

    private function onAdded(e:Event):void
    {

        trace(e.target.name + " was added to the stage at "+e.target.x + ", " + e.target.y);


    }

    private function closePop():void {
        mm.popCont.removeChildAt(0);
    }

    private function panMap(m:MouseEvent):void
    {
        //click and drag to pan the minimap
        mm.startDrag();
        trace(mouseX+", "+mouseY);
        mm.addEventListener(MouseEvent.MOUSE_UP, relsMap, false, 0, true);
    }

    private function relsMap(m:MouseEvent):void
    {
        //drops the minimap
        mm.stopDrag();

    }'

Ответы [ 3 ]

2 голосов
/ 11 мая 2011

Использовали ли вы команду addchild() после загрузки объекта на флэш-память? Вам необходимо добавить объекты в список отображения, чтобы они отображались на сцене (при условии, что вы кодируете в AS3)

http://forums.creativecow.net/thread/190/864240

1 голос
/ 12 мая 2011

Похоже, здесь ваша проблема

exp.x = i * 0.5 + 1156;
exp.y = i*0.75 + 1651;

Я не знаю, какого размера ваш swf, но я сомневаюсь, что он может обработать эти числа.

0 голосов
/ 11 мая 2011

Честно говоря, с этой целью мало что можно сделать, если вы не отправите код.

Я скажу так: если я нахожусь в ситуации, когда что-то должно происходить, а это не так, вам просто нужно очень методично проследить свой путь назад по логической цепочке.Если ваши объекты не появляются на сцене, есть явно ограниченное количество вещей, которые могут быть не в своем роде.Краткий (и неполный) контрольный список:

XML - правильно ли данные извлекаются и анализируются?проследить в варах. Библиотека - если вы полагаетесь на объекты в библиотеке, убедитесь, что все имена их связей верны, и ваш путь указан правильно. Список отображения - очевидно, addChild необходим, но каков ваш порядок отображения списка?Есть ли что-то скрывающее ваши объекты? Объектные реквизиты - наконец, убедитесь, что все свойства, такие как «масштаб», «видимость» и т. Д., Установлены правильно.

И в случае неудачи выньте последовательность из проекта и протестируйте логику с минимальным количеством переменных.Если тестовый пример работает нормально, измените область поиска ошибок ...

удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...