2010-08-26 43 views
0

下面是一个示例:只有AS3中的动态类?

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

负载1级班,现在我不想再创建一个函数只是加载另一个层次..

我想这loadLevel加载1级,级别2等。在相同的功能上。

想法会有所帮助。 :)

谢谢!

回答

0

下面是另一个答案:

保持你的水平在数组中。

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();    
} 
2
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
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; 
0

这是我用:

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

,并使用调用它:

loadLevel(new Level1()); 

,并确保各级从类级别

class Level1 extends Level 

延伸但我认为其他解决方案w ork更适合像Level1,Level2,Level3这样的课程。我用它来控制场景在我的游戏,Scene_Title,Scene_Game,Scene_Credits

+0

可能是一种可能性:)谢谢!我也使用“class Level1 extends Level” – keithics 2010-08-26 22:11:40