Динамические классы в AS3? - PullRequest
0 голосов
/ 27 августа 2010

Ниже приведен образец:

    private function loadLevel(name:String):void{
        level1 = new Level1(name);      
        level1.onInitialize.addOnce(onLevelReady);
        level1.loadData();              
    }

Загружает только класс level1, теперь я не хочу создавать другую функцию только для загрузки другого уровня.

Я хочу, чтобы loadLevel загружал level1, level2 и т. Д. Для одной и той же функции.

идеи помогут. :)

спасибо!

Ответы [ 4 ]

2 голосов
/ 27 августа 2010
private function loadLevel(level : int, name : String) : void {
    try {
        var LevelClass : Class = getDefinitionByName("Level" + level) as Class;
        // i think you should also create an ILevel interface for your levels
        var level : ILevel = new LevelClass(name) as ILevel;
        level.onInitialize.addOnce(onLevelReady);
        level.loadData();  

    } catch(e:Error) {
        trace("Failed: " + e.message)      
    }
}


private function somewhere() : void {
   // The downside is that you need to make sure the actual Level1,Level2,... classes 
   // are included by mxmlc when compiling your swf. This can be done by refencing them somewhere in the code.
   Level1;
   loadLevel(1, "some Level");
}

другое решение может выглядеть так:

private function loadLevel(level : int, name : String) : void {
    var level : ILevel;
    switch(level) {
        case 1:
            level = new Level1(name);
            break;
        case 2:
            level = new Level2(name);
            break;
        default:
            throw new Error("No such Level");
    }

    level.onInitialize.addOnce(onLevelReady);
    level.loadData();  
}
0 голосов
/ 27 августа 2010

Вот еще один ответ:

Держите свои уровни в массиве.

private const levels = [null, Level1, Level2, Level3]

А затем:

private function loadLevel(name:String, n:int):void{
    level = new (levels[n])(name);      
    level.onInitialize.addOnce(onLevelReady);
    level.loadData();              
}
0 голосов
/ 27 августа 2010

Это то, что я использую:

private function loadLevel(level:Level):void{      
    level.onInitialize.addOnce(onLevelReady);
    level.loadData();              
}

и называю это используя:

loadLevel(new Level1());

И убедитесь, что все уровни выходят из класса Level

class Level1 extends Level

Но я думаю, что другие решения работают лучше для таких классов, как Level1, Level2, Level3.Я использую это для управления сценами в моей игре, Scene_Title, Scene_Game, Scene_Credits

0 голосов
/ 27 августа 2010
 private function loadLevel(name:String, level:Number):void{
     var Level:Class = getDefinitionByName("Level" + level) as Class;
     level1 = new Level(name);      
     level1.onInitialize.addOnce(onLevelReady);
     level1.loadData();              
 }

Если вашему классу требуется путь к классу.

var Level:Class = getDefinitionByName("com.domain.Level" + level) as Class;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...