我正努力在我的游戏中创建一个代表冠军能力的课程。我遇到的障碍是我不知道如何设计一个具有多种属性的Ability类,即破坏性,眩晕,减速。我的想法是创建表示所有这些属性的枚举类,然后将它们分配给我的能力,例如:
public enum Effect {
DAMAGE,
SLOW,
STUN,
...
}
但是,如果我有能力同时眩晕并造成伤害怎么办?我应该创建一个Effect []数组并以某种方式处理它,还是应该创建像Serializable这样的接口标记(这是我曾经有过的最狡猾的想法)?或者也许有类似案例的技术?
答案 0 :(得分:1)
具有Effect
个对象的数组似乎很好,列表会更好。您甚至可以创建自己的包装类,以提供基于应用效果计算实体属性的其他方法。
例如:
public class Effects
{
public int calculateDamage(int baseDamage)
{
int damage = baseDamage;
if (effects.contains(Effect.DAMAGE)) {
// some effect stacking :)
damage *= 1.5 * Collections.frequency(effects, Effect.DAMAGE);
}
if (effects.contains(Effect.STUN)) {
damage = 0;
}
return damage;
}
private final List<Effect> effects = new ArrayList<>();
}
Collections.frequency()
是来自Apache Commons library的实用工具方法,我强烈推荐。
答案 1 :(得分:-1)
你可以创建一个类型为Effect的类,所有属性都作为布尔属性,然后根据需要为它们分配true或false,如果你想将属性扩展为那些你无法在编译时决定考虑的属性在Effect类
中放置一个HashMap类型的hashmap