我正在写一个2D游戏,当地图滚动时,我会随机生成生物。但是,我需要随机选择一个生物类型 - 这意味着我需要从列表中随机选择一个类并创建它的新实例。
我的实体类目前采用构造函数参数(对游戏的引用),但如果它使这个过程更容易,就可以移动它。
我原本打算使用枚举来定义实体类型以及“处理程序类”,但此时枚举系统对我来说效果不佳,因为对于不同实体的不同属性有太多逻辑。
答案 0 :(得分:2)
为你的怪物创建一个枚举,并使用Math.random()
选择一个:
public enum Monster {
AcidBlob,
Orc,
Etc
}
Monster m = Monsters.values[Math.random() * Monsters.values().length];
您可以像常规课一样为枚举添加方法和字段。
答案 1 :(得分:0)
如果您愿意,可以使用类名列表,并使用Class.forName(className).newInstance()创建实例。您不需要将结果强制转换为实际的类名,只需将所有怪物的常用超类强制转换为。
String randomMonsterName = listOfMonsterNames[randomIndex];
Monster newMonster = (Monster) (Class.forName(randomMonsterName).newInstance());
当然,它确实要求您的怪物只能使用默认构造函数构建。 (你可以这样做,但它变得更加混乱。)