2013-06-02 79 views
-1

我回退並添加到遊戲的主循環時出現問題,如果我可以從我不知道的類創建對象,則會消除此任務。調用Java中未知類的方法並創建對象

現在我得:

if (Monesers.Zombie.canBeCreated(world,objects)){ 
    Zombie.add(new Monster()) 
} 

if (Monesers.Sceleton.canBeCreated(world,objects)){ 
    objects.add(new Monster()) 
} 

我要找的東西,我可以循環到所有類不提名字的類,所以我不必爲每一個新的一遍又一遍複製相同的代碼遊戲中的東西。

+3

對我來說不是很清楚。你可以請更清楚地描述你想要什麼 – stinepike

+0

你需要的可能是反射,雖然你的問題有點模糊...... – NilsH

+0

@NilsH我增加了更多細節 – ExotickBoyPl

回答

1

反射會讓你到某個地方...我不知道它是否是首選方法。

你可以做這樣的事情。有充分的怪物類型實現一個接口,這樣的事情:

public interface Monster { 

    public boolean canBeCreated (); 

} 

然後你可以有一個怪物的創造者,是這樣的:

import java.lang.reflect.Constructor; 
import java.lang.reflect.InvocationTargetException; 

public class MonsterCreator { 

    private Monster[] monsterTypes; 

    public MonsterCreator () { 
     monsterTypes = new Monster[2]; 
     monsterTypes[0] = new Zombie (); 
     monsterTypes[0] = new Skeleton (); 
    } 

    public void tick () { 
     for (Monster m : monsterTypes) { 
      if (m.canBeCreated ()) { 
       try { 
        Constructor<?>[] constr = m.getClass () 
         .getConstructors (); 
        Monster toAdd = (Monster) constr[0].newInstance (); 
        MonsterContainer.add (toAdd); 
       } catch (InstantiationException | IllegalAccessException 
        | IllegalArgumentException | InvocationTargetException e) { 
        e.printStackTrace (); 
       } 
      } 
     } 
    } 

} 

這是值得一試... :)

當然,怪物類型的東西可以用類似於鏈接到類類型的枚舉常量的地圖來完成......再次,這僅僅是爲了示例。只是想在問題結束之前發佈這篇文章!

+0

不是我正在尋找的東西,它比以前更好! – ExotickBoyPl

相關問題