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