XNA对BasicEffect应用效果

时间:2014-05-11 21:05:54

标签: c# xna

我在XNA 4.0中制作游戏,我真的不了解效果和basiceffect的东西。

我目前有这个:

foreach (ModelMesh mesh in model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        if (mesh.Name != collisionShapeName)
        {
            effect.TextureEnabled = true;

            effect.Texture = _textures[name];

            effect.SpecularColor = new Vector3(_specularColor);
            effect.SpecularPower = 32;
        }
    }
}

我找到了渲染阴影的教程,我需要在我的网站上应用这些代码:

foreach (ModelMesh mesh in model.Meshes)
{
    foreach (ModelMeshPart part in mesh.MeshParts)
        part.Effect = material.effect;
}

所以我将此代码放在我的foreach (BasicEffect effect in mesh.Effects)之前,但它不起作用,这里出现错误foreach (BasicEffect effect in mesh.Effects)

  

无法投射类型'效果'输入' BasicEffect'。

我真的迷失在这里......

1 个答案:

答案 0 :(得分:0)

我对XNA做的不多,但这是一个基本的C#问题。

正如错误所述,您正在尝试迭代Effects mesh,但是您要将它们全部转移到BasicEffect个实例。 BasicEffectEffect的子类,并非您添加的所有效果都属于BasicEffect类型。演员阵容失败了。

理想情况下,您可以在添加BasicEffect对象之前设置它们的属性,而不是迭代Effects属性,但不知道您的代码,我能做到最好建议做这样的事情:

foreach (Effect effect in mesh.Effects)
{
    var basicEffect = effect as BasicEffect;
    if (basicEffect != null)
    {
        // Do some stuff with basicEffect
    }
}

通常情况下,这种向下转换表示代码结构中的某些其他缺陷,但它可能是您在场景中可以做的最好的事情(如果不深入了解您的代码,就无法做出更好的建议)。