Variables XNA 4.0共享基本效果变量?

Variables XNA 4.0共享基本效果变量?,variables,xna,shared,Variables,Xna,Shared,我正在制作一款灵感来自卡坦定居者的游戏。(www.facebook.com/Expanze) 我正在优化我的代码,它呈现了同一模型的数百个实例 foreach (ModelMesh mesh in model.Meshes) { foreach (BasicEffect effect in mesh.Effects) { effect.Alpha = 1.0f; effect.LightingEnabled = true; effe

我正在制作一款灵感来自卡坦定居者的游戏。(www.facebook.com/Expanze) 我正在优化我的代码,它呈现了同一模型的数百个实例

foreach (ModelMesh mesh in model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        effect.Alpha = 1.0f;
        effect.LightingEnabled = true;
        effect.DirectionalLight0.Direction = GameState.LightDirection;
        effect.DirectionalLight0.DiffuseColor = GameState.LightDiffusionColor;
        effect.DirectionalLight0.SpecularColor = GameState.LightSpecularColor;
        effect.DirectionalLight0.Enabled = true;
        effect.View = GameState.view;
        effect.Projection = GameState.projection;
        for (int loop1 = 0; loop1 < validItems; loop1++)
        {
             if (instance[loop1].Visible)
             {
                  instance[loop1].UpdateEffect(effect, meshNumber);
                  effect.World = transforms[mesh.ParentBone.Index] * instance[loop1].World;

                  mesh.Draw();

                  if(loop1 > 4)
                       break;
             }
        }
    }
    meshNumber++;
}
foreach(model.mesh中的ModelMesh网格)
{
foreach(网格中的基本效果。效果)
{
效应α=1.0f;
effect.LightingEnabled=真;
effect.DirectionalLight0.Direction=游戏状态.LightDirection;
effect.DirectionalLight0.DiffuseColor=GameState.LightDiffusionColor;
effect.DirectionalLight0.SpecularColor=GameState.LightSpecularColor;
effect.DirectionalLight0.Enabled=true;
effect.View=GameState.View;
effect.Projection=GameState.Projection;
for(int-loop1=0;loop14)
打破
}
}
}
meshNumber++;
}
在:
instance[loop1].UpdateEffect(effect,meshNumber)

我更改环境光颜色:
effect.AmbientLightColor=playerAmbientLightColor

我的问题是,更改颜色会影响应已绘制的早期实例的颜色

两个图像,一个带有if(loop1>4)中断,第二个没有这两行:


灵感来源于或几乎等同于?哈哈哈

这里可能发生的情况是您的
Draw()
调用被延迟,并且您正在为每个模型使用相同的
效果实例。那么,如果您正在设置值,调用
Draw
(延迟;读取:直到稍后才执行),切换模型,然后为已使用的
Effect
实例设置值,然后再次调用Draw,会发生什么情况呢

当执行延迟的
Draw
调用时,它们使用传递给
效果的最新(读取:最后一次)设置/参数(或类似于这些行的内容)

解决方案是为每个模型创建(克隆等)每个
效果的新实例


可能还有其他问题导致这种情况;您使用的绘图模式是什么?您的XNA设置是什么?这只是人们遇到的一个标准问题。

灵感来自或几乎完全相同于?哈哈哈

这里可能发生的情况是您的
Draw()
调用被延迟,并且您正在为每个模型使用相同的
效果实例。那么,如果您正在设置值,调用
Draw
(延迟;读取:直到稍后才执行),切换模型,然后为已使用的
Effect
实例设置值,然后再次调用Draw,会发生什么情况呢

当执行延迟的
Draw
调用时,它们使用传递给
效果的最新(读取:最后一次)设置/参数(或类似于这些行的内容)

解决方案是为每个模型创建(克隆等)每个
效果的新实例


可能还有其他问题导致这种情况;您使用的绘图模式是什么?您的XNA设置是什么?这只是人们遇到的一个标准问题。

这真的是唯一的灵感——无论你对这个问题的看法如何,游戏机制都是不同的。我通过为每个实例更改所有3种灯光颜色(环境光、漫反射…)来解决此问题。在此之前,我在某些情况下只改变了环境色。这真的是很有启发性的-游戏机制真的不同于你对问题的正确理解。我通过为每个实例更改所有3种灯光颜色(环境光、漫反射…)来解决此问题。在此之前,在某些情况下,我只更改环境光颜色。