XNA应用上BasicEffect效果(XNA Apply effect on BasicEffec

2019-10-20 02:54发布

我在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”。

我真的失去了这里......

Answer 1:

我没有做太多与XNA但是这是一个基本的C#问题。

正如错误说,你要遍历Effects你的mesh ,但你他们都铸造BasicEffect实例。 BasicEffect是的一个子类Effect ,而不是所有的,你要添加的类型的影响BasicEffect 。 所以转换失败。

理想情况下,你会设置的属性BasicEffect对象他们加入之前,而不是遍历Effects财产,但不知道任何更多关于你的代码,我建议最好是做这样的事情:

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

通常,这种向下转换的指示在你的代码结构,其他地方的一些缺陷,但它可能是你可以在你的情况做了最好的(这是不可能的建议任何没有你的代码有更深的了解更好)。



文章来源: XNA Apply effect on BasicEffect
标签: c# xna