我在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'。
我真的迷失在这里......
答案 0 :(得分:0)
我对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
}
}
通常情况下,这种向下转换表示代码结构中的某些其他缺陷,但它可能是您在场景中可以做的最好的事情(如果不深入了解您的代码,就无法做出更好的建议)。