我的代码似乎编译好了,但是当我尝试运行它时,它的挂起非常糟糕。
我一直在跟随Riemers XNA教程here。
我对C#非常熟悉,但绝不是专家。到目前为止,我没有遇到任何问题,并且没有任何错误或异常被抛出......它只是挂断了。我在他的相关论坛上看过,用户讨论过其他问题,通常与拼写错误或代码错误有关,但那里没有这样的东西......每个人似乎都可以运行得很好。
或许我做错了吗?底部的嵌套for循环对我来说似乎有点笨拙。 screenWidth和screenHeight分别为500和500。
BTW:这是从LoadContent覆盖方法运行的,所以它应该只运行一次,据我所知。
private void GenerateTerrainContour()
{
terrainContour = new int[screenWidth];
for (int x = 0; x < screenWidth; x++)
terrainContour[x] = screenHeight / 2;
}
private void CreateForeground()
{
Color[] foregroundColors = new Color[screenWidth * screenHeight];
for (int x = 0; x < screenWidth; x++)
{
for (int y = 0; y < screenHeight; y++)
{
if (y > terrainContour[x])
foregroundColors[x + y * screenWidth] = Color.Green;
else
foregroundColors[x + y * screenWidth] = Color.Transparent;
fgTexture = new Texture2D(device, screenWidth, screenHeight, false, SurfaceFormat.Color);
fgTexture.SetData(foregroundColors);
}
}
}
答案 0 :(得分:6)
可能与您正在创建250,000个屏幕大小的纹理(神圣的moly)这一事实有关!
资源分配总是很重 - 尤其是当您处理声音和图像等媒体时。
看起来你真的只需要一个纹理,尝试在循环之外移动fgTexture = new Texture2D(device, screenWidth, screenHeight, false, SurfaceFormat.Color);
。然后尝试将fgTexture.SetData(foregroundColors);
移到循环之外。
private void CreateForeground()
{
Color[] foregroundColors = new Color[screenWidth * screenHeight];
fgTexture = new Texture2D(device, screenWidth, screenHeight, false, SurfaceFormat.Color);
for (int x = 0; x < screenWidth; x++)
{
for (int y = 0; y < screenHeight; y++)
{
if (y > terrainContour[x])
foregroundColors[x + y * screenWidth] = Color.Green;
else
foregroundColors[x + y * screenWidth] = Color.Transparent;
}
}
fgTexture.SetData(foregroundColors);
}
答案 1 :(得分:3)
for (int x = 0; x < screenWidth; x++)
{
for (int y = 0; y < screenHeight; y++)
{
if (y > terrainContour[x])
foregroundColors[x + y * screenWidth] = Color.Green;
else
foregroundColors[x + y * screenWidth] = Color.Transparent;
}
}
foregroundTexture = new Texture2D(device, screenWidth, screenHeight, false, SurfaceFormat.Color);
foregroundTexture.SetData(foregroundColors);
您的问题出在最后两行。在你的循环中,你正在创建 500 x 500 Texture2D
个对象,这会减慢你的速度。将它们移到for循环之外。