首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多种效果/功能的能力对象(游戏)

具有多种效果/功能的能力对象(游戏)
EN

Stack Overflow用户
提问于 2014-09-27 10:05:09
回答 2查看 193关注 0票数 0

我试着做一个在我的游戏中代表冠军能力的类。我面临的障碍是,我不知道如何设计一个具有多种属性的能力类,即破坏性、晕眩、减速。我的想法是创建表示所有这些属性的enum类,然后将它们分配给我的能力,例如:

代码语言:javascript
复制
public enum Effect {
    DAMAGE,
    SLOW,
    STUN,
    ... 
}

但是如果我有一种同时晕眩和造成伤害的能力呢?我是应该创建一个Effect[]数组并以某种方式来处理它,还是应该创建像Serializable这样的界面标记(这是我有过的最令人讨厌的想法)?或者也许有什么技术可以解决这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-27 10:52:49

一个带有Effect对象的数组看起来很好,一个列表就更好了。您甚至可以创建自己的包装类,以提供基于应用效果计算实体属性的其他方法。

例如:

代码语言:javascript
复制
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()是来自http://commons.apache.org/proper/commons-collections/的实用方法,我强烈推荐它。

票数 1
EN

Stack Overflow用户

发布于 2014-09-27 10:41:46

您可以创建一个类型效果类,将所有属性都作为布尔属性,然后根据您的需要将它们赋值为true或false,如果您希望将属性扩展到您在编译时无法决定的属性,请考虑将hashmap类型的哈希映射放到实际类中。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26073509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档