首页 > 解决方案 > 随机项目生成器中的“名称在此上下文中不存在”错误

问题描述

目标是创建一个随机项目生成器,在本例中是药水。一切正常,直到我尝试使随机选择的药水类型实际影响它们增加的统计数据,我所遵循的指南没有超过。

错误表明在此上下文中不存在诸如 HEALTH 和 ENERGY 之类的名称,以及显示“无法将类型 'void' 隐式转换为 'BasePotion.PotionTypes'”的名称

我正在按照指南创建一个 rpg 来尝试学习 c#。到目前为止,我一直在关注它,但决定扩展我们正在做的代码。我最初在自己的函数中有 if 语句,但这给出了“预期标识符”错误。

private void CreatePotion() { 

    newPotion = new BasePotion();

    newPotion.PotionType = ChoosePotionType();
    newPotion.ItemName = newPotion.PotionType.ToString() +" POTION";
    newPotion.ItemID = Random.Range(1,100);
    if (newPotion.PotionType == HEALTH) {
        newPotion.Stamina = Random.Range(1,11);
        newPotion.Endurance = Random.Range(1,11);
        newPotion.Strength = 0;
        newPotion.Intellect = 0;
    }
    else if (newPotion.PotionType == ENERGY){
        newPotion.Stamina = 0;
        newPotion.Endurance = 0;
        newPotion.Strength = Random.Range(1,11);
        newPotion.Intellect = Random.Range(1,11);
    }
    else if (newPotion.PotionType == STAMINA){
        newPotion.Stamina = Random.Range(1,11);
        newPotion.Endurance = 0;
        newPotion.Strength = 0;
        newPotion.Intellect = 0;
    }
    else if (newPotion.PotionType == ENDURANCE){
        newPotion.Stamina = 0;
        newPotion.Endurance = Random.Range(1,11);
        newPotion.Strength = 0;
        newPotion.Intellect = 0;
    }
    else if (newPotion.PotionType == STRENGTH){
        newPotion.Stamina = 0;
        newPotion.Endurance = 0;
        newPotion.Strength = Random.Range(1,11);
        newPotion.Intellect = 0;
    }
    else if (newPotion.PotionType == INTELLECT){
        newPotion.Stamina = 0;
        newPotion.Endurance = 0;
        newPotion.Strength = 0;
        newPotion.Intellect = Random.Range(1,11);
    }
}

if 语句是给出错误的行。

我真的不知道复制这个问题需要多少,但这里是它派生的 BasePotion 脚本。

public enum PotionTypes {
    HEALTH,
    ENERGY,
    STRENGTH,
    ENDURANCE,
    STAMINA,
    INTELLECT
}

private PotionTypes potionType;
private int spellEffectID;

public PotionTypes PotionType {
    get { return potionType; }
    set { potionType = value; }
}

public int SpellEffectID {
    get { return spellEffectID; }
    set { spellEffectID = value; }
}

我有另一个几乎相同的脚本减去 if 语句以与此相同的方式生成盔甲,并且按预期工作,包括以与我在此脚本中相同的方式分配类型。

我真的无法弄清楚问题是什么,但如果有人有更好的方法来解决这个问题,那也会有帮助。

标签: c#unity3d

解决方案


第一个问题是您试图HEALTH直接从您的班级访问例如BasePositionHEALTH不是您班级的成员,但PotionTypes您必须通过PotionTypeslike访问它PotionTypes.HEALTH

所以PotionTypes.在每个枚举值前面加上。

例如在

if(newPotion.PotionType == PotionTypes.HEALTH)

对于第二个问题,我们需要知道您的代码ChoosePotionType

显然它被定义为

private void ChoosePotionType()
{ 
    ... 
}

但为了使用它

newPotion.PotionType = ChoosePotionType();

它必须返回 aPotionType所以它应该看起来像

private PotionType ChoosePotionType ()
{
    ...

    return PotionType.XY;
}

推荐阅读