在java中有很多类会降低性能吗?
因此,我尝试使用javafx(类似于炉石)制作一个CCG类型的游戏,我想知道为每张卡设置一个类是否是一个非常糟糕的主意,因为我做了一些研究,炉石的大多数粉丝制作的纸牌游戏都使用JSON来获取卡对象。例如,如果游戏中只有4张牌的名称:在java中有很多类会降低性能吗?,java,performance,javafx,Java,Performance,Javafx,因此,我尝试使用javafx(类似于炉石)制作一个CCG类型的游戏,我想知道为每张卡设置一个类是否是一个非常糟糕的主意,因为我做了一些研究,炉石的大多数粉丝制作的纸牌游戏都使用JSON来获取卡对象。例如,如果游戏中只有4张牌的名称: 龙王 瓦肯 海盗 查克·诺里斯 我有4个类,分别有名称。现在我认为这是必要的,因为每一张牌都有它自己的行为,这意味着一张牌在被召唤时可能会做一些事情,在这种情况下,我有一个被调用的方法,而其他的可能有其他方法,或者根本没有 现在,正如你可能知道的,如果你在游戏中
- 龙王
- 瓦肯
- 海盗
- 查克·诺里斯 我有4个类,分别有名称。现在我认为这是必要的,因为每一张牌都有它自己的行为,这意味着一张牌在被召唤时可能会做一些事情,在这种情况下,我有一个被调用的方法,而其他的可能有其他方法,或者根本没有
- 所有具体的卡类(如Vulcan)都扩展了一个抽象的卡类,该类包含名称和成本等字段。
- 在模型中的卡片包中,我有两个其他包,一个用于仆从,另一个用于咒语
如果有人能回答我的问题或提供任何帮助,我将不胜感激。上千节课不会以任何明显的方式影响性能。您甚至可以提前编译或缓存它们 也就是说,许多游戏引擎使用实体组件方法来表示游戏实体,并将效果等功能保留为不同的功能。 通过这种方式,您可以组合卡牌的不同效果,这是单继承所无法做到的 下面是一个描述该方法的链接 你可以逐渐适应这个。 例如,您的卡可能只是一种类型的实体
class Card {
int mana;
String name;
Effect[] effects;
Trigger[] triggers;
}
效果可以是作用于游戏场和当前卡牌的代码片段
interface Effect {
void affect(Playfield pf);
}
触发器可以是与卡相关的事件侦听器。
也就是说,当对手打出一张牌时,可能会有一个触发器触发
等等。我不是这方面的专家,但我认为虽然您的方法可行,但它可能会使可维护性和可扩展性变得更加困难 您可以尝试的另一种选择是将卡的特征存储在数据库(或某种属性文件)中。在这种情况下,您只需要一个公共的
卡类,它从数据库加载其值
class Card {
int id;
String name;
int cost;
int speed;
OnSummonEffect summonEffect;
}
interface OnSummonEffect { ... }
abstract class StatBoostEffect implements OnSummonEffect { ... }
class AttackBoostEffect extends StatBoostEffect { ... }
牌桌
CardID Name Cost Speed SummonEffect
1 DragonMaster 5 10 com.foo.bar.AttackBoostEffect
2 Vulcan 3 12 com.foo.bar.SomeSummonEffect
虽然保存类名听起来可能并不优雅(而且可能有其自身的副作用),但这种方法使添加新内容变得容易
添加一个新的卡片类型只是向数据库表中添加一个新条目,并可能向项目中添加新的“effect”类。如果您决定更改卡的某些属性(或添加新属性),则只需在数据库表中添加/更改列,然后添加单个卡类。如果您为每种卡类型创建了一个类,则必须更改基本卡,然后更改每一个卡类。类的数量并不重要。以后可以进行优化。更好地关注特性、功能和易于开发。拥有如此多的类可能会使开发变得困难。正如我所建议的,我将专注于这一点,而不是担心性能。我对游戏的理解还不够透彻,不知道你真正想做什么,但你可能想了解一些设计模式(特别是行为模式,比如抽象工厂或工厂方法等创造性模式)。预编译类AOT???这对我来说毫无意义。我同意他们是免费的,除了他们的加载时间(这几乎不重要,除非有数百个)。