2010-08-26 49 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