在java中有很多类会降低性能吗?

在java中有很多类会降低性能吗?,java,performance,javafx,Java,Performance,Javafx,因此,我尝试使用javafx(类似于炉石)制作一个CCG类型的游戏,我想知道为每张卡设置一个类是否是一个非常糟糕的主意,因为我做了一些研究,炉石的大多数粉丝制作的纸牌游戏都使用JSON来获取卡对象。例如,如果游戏中只有4张牌的名称: 龙王 瓦肯 海盗 查克·诺里斯 我有4个类,分别有名称。现在我认为这是必要的,因为每一张牌都有它自己的行为,这意味着一张牌在被召唤时可能会做一些事情,在这种情况下,我有一个被调用的方法,而其他的可能有其他方法,或者根本没有 现在,正如你可能知道的,如果你在游戏中

因此,我尝试使用javafx(类似于炉石)制作一个CCG类型的游戏,我想知道为每张卡设置一个类是否是一个非常糟糕的主意,因为我做了一些研究,炉石的大多数粉丝制作的纸牌游戏都使用JSON来获取卡对象。例如,如果游戏中只有4张牌的名称:

  • 龙王
  • 瓦肯
  • 海盗
  • 查克·诺里斯

    我有4个类,分别有名称。现在我认为这是必要的,因为每一张牌都有它自己的行为,这意味着一张牌在被召唤时可能会做一些事情,在这种情况下,我有一个被调用的方法,而其他的可能有其他方法,或者根本没有

现在,正如你可能知道的,如果你在游戏中有100张牌,那么类的数量也会变大(这只是卡包,因为我使用的是MVC模型,项目在我没有意识到的情况下变得非常大)

其他一些信息:

  • 所有具体的卡类(如Vulcan)都扩展了一个抽象的卡类,该类包含名称和成本等字段。
  • 在模型中的卡片包中,我有两个其他包,一个用于仆从,另一个用于咒语
另外,如果我没有为每张牌设置一个类,我如何实例化一张新的特定牌来添加到玩家的手上?对于这个“类丰度”问题是否有不同的解决方案,这是否会影响游戏运行时的性能,甚至影响jar文件中的空间
如果有人能回答我的问题或提供任何帮助,我将不胜感激。上千节课不会以任何明显的方式影响性能。您甚至可以提前编译或缓存它们

也就是说,许多游戏引擎使用实体组件方法来表示游戏实体,并将效果等功能保留为不同的功能。 通过这种方式,您可以组合卡牌的不同效果,这是单继承所无法做到的

下面是一个描述该方法的链接

你可以逐渐适应这个。 例如,您的卡可能只是一种类型的实体

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???这对我来说毫无意义。我同意他们是免费的,除了他们的加载时间(这几乎不重要,除非有数百个)。