Создание сетки as3isolib на сцене с использованием класса, вызываемого из класса документа - PullRequest
0 голосов
/ 17 ноября 2011

Я действительно потерян здесь.Я уже проверил много ответов на вопрос «как добавить что-то на сцене из кода, который не входит в класс документа», но я не могу найти простой ответ.

Ну, у меня есть два класса:

documentclass, объявленный на FLA:

package 
{
    import as3isolib.display.scene.IsoGrid;
    import as3isolib.display.IsoView;
    import as3isolib.display.primitive.IsoBox;
    import as3isolib.display.scene.IsoScene;
    import flash.display.Sprite;

    import com.sb.*;
    import com.sb.services.*;
    import as3isolib.geom.Pt;

    //[SWF(width='760', height='600', backgroundColor='#000000', frameRate='30')]
    public class iso extends Sprite
    {
        private var grid:IsoGrid;
        private var scene:IsoScene;
        private var view:IsoView;

        //Script de Execução do jogo, depois do preloader.
        public function iso()
        {
            trace("It's Alive!");

            var map = new Map();
            map.IsoStarter();

            trace("Ending Loader.");

        }

    }

}

и карте классов, я звоню:

package com.sb
{
    import as3isolib.display.scene.IsoGrid;
    import as3isolib.display.IsoView;
    import as3isolib.display.primitive.IsoBox;
    import as3isolib.display.scene.IsoScene;

    import flash.display.MovieClip;

    import com.sb.*;
    import com.sb.services.*;
    import as3isolib.geom.Pt;

    public class Map extends MovieClip
    {

        private var grid:IsoGrid;
        private var scene:IsoScene;
        private var view:IsoView;

        public function Map()
        {
            //Loading ISO 
        }

        public function MakeMap()
        {

        }
        public function EnableScrolling()
        {

        }

        public function IsoStarter()
        {
            //Load ISO + Iso Configuration
            var box:IsoBox = new IsoBox();
            box.moveTo(15, 15, 0);

            var grid = new IsoGrid();
            grid.setGridSize(400, 400, 5);
            grid.cellSize = 25;
            grid.showOrigin = false;

            var scene = new IsoScene();
            scene.addChild(box);
            scene.addChild(grid);
            scene.render();

            var view = new IsoView();
            view.setSize(760, 600);
            view.centerOnPt(new Pt(150,150,0));
            view.addScene(scene);
            super.addChild(view);

        }

    }

}

Кстати: этот работает отлично (класс документа), но недостаточно организован для меня:

package 
{
    import as3isolib.display.scene.IsoGrid;
    import as3isolib.display.IsoView;
    import as3isolib.display.primitive.IsoBox;
    import as3isolib.display.scene.IsoScene;
    import flash.display.Sprite;

    import com.sb.*;
    import com.sb.services.*;
    import as3isolib.geom.Pt;

    //[SWF(width='760', height='600', backgroundColor='#000000', frameRate='30')]
    public class iso extends Sprite
    {
        private var grid:IsoGrid;
        private var scene:IsoScene;
        private var view:IsoView;

        //Script de Execução do jogo, depois do preloader.
        public function iso()
        {
            trace("It's Alive!");

            IsoStarter();

            trace("Ending Loader.");

        }


        /* *
         * Iso não pode ser chamado de outra classe senão a Document Root
         * Se for encontrado um jeito para fazer isso, transferir essas 
         * funções para outro script, afim de manter a ordem.
         */

        public function IsoStarter()
        {
            //Load ISO + Iso Configuration
            var box:IsoBox = new IsoBox();
            box.moveTo(15, 15, 0);

            var grid = new IsoGrid();
            grid.setGridSize(400, 400, 5);
            grid.cellSize = 25;
            grid.showOrigin = false;

            var scene = new IsoScene();
            scene.addChild(box);
            scene.addChild(grid);
            scene.render();

            var view = new IsoView();
            view.setSize(760, 600);
            view.centerOnPt(new Pt(150,150,0));
            view.addScene(scene);
            super.addChild(view);

        }


    }

}

Спасибо.

1 Ответ

2 голосов
/ 18 ноября 2011

В вашем классе Map, super.addChild(view); добавляет ваше представление в мувиклип.Попробуйте либо parent.addChild(view), либо stage.addChild(view).Если ни один из этих способов не работает, попробуйте передать ссылку на ваш класс документа в Map:

Измените класс своего документа, чтобы передать ссылку на себя в Map:

 public function iso()
        {
            trace("It's Alive!");

            var map = new Map(this);
            map.IsoStarter();

            trace("Ending Loader.");

        }

И измените конструктор вкласс вашей карты:

public class Map extends MovieClip
    {

        private var grid:IsoGrid;
        private var scene:IsoScene;
        private var view:IsoView;
        private var parentRef:iso;  // <-----------

        public function Map(parentClass:iso) // <-----------
        {
            this.parentRef = parentClass;
            //Loading ISO 
        }

        public function MakeMap()
        {

        }
        public function EnableScrolling()
        {

        }

        public function IsoStarter()
        {
            //Load ISO + Iso Configuration
            var box:IsoBox = new IsoBox();
            box.moveTo(15, 15, 0);

            var grid = new IsoGrid();
            grid.setGridSize(400, 400, 5);
            grid.cellSize = 25;
            grid.showOrigin = false;

            var scene = new IsoScene();
            scene.addChild(box);
            scene.addChild(grid);
            scene.render();

            var view = new IsoView();
            view.setSize(760, 600);
            view.centerOnPt(new Pt(150,150,0));
            view.addScene(scene);
            parentRef.addChild(view);     // <-----------

        }

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