В настоящее время я работаю над игрой, в которой нам необходимо объединить использование DrawUserIndexedPrimitives и обычного spriteBatch.Draw . Не объединены, поскольку мы используем их одновременно, но сначала мы должны нарисовать некоторые 2d спрайты, используя spriteBatch, где после того, как мы отключим spriteBatch, чтобы включить basicEffect и нарисовать примитивы, и, наконец, снова включить spriteBatch. Приведенный ниже код показывает раздел кода, в котором возникает проблема.
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, cam.get_transformation(GraphicsDevice));
levelController.Draw(spriteBatch);
if (gameReady)
{
foreach (GameObject.GameObject go in gameObjects)
{
go.Draw(spriteBatch);
}
spriteBatch.End();
foreach (GameObject.GameObject go in gameObjects)
{
if (go is GameObject.Enemy.Enemy)
{
GameObject.Enemy.Enemy enemy = (GameObject.Enemy.Enemy)go;
basicEffect = new BasicEffect(graphics.GraphicsDevice);
basicEffect.VertexColorEnabled = true;
basicEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.TriangleList, enemy.GetCollisionTriangle.Triangle, 0, 3, enemy.GetCollisionTriangle.Indices, 0, 1);
}
}
}
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, null, null, null, null, cam.get_transformation(GraphicsDevice));
Если приведенный ниже код указан в кавычках, задержка прекращается.
basicEffect = new BasicEffect(graphics.GraphicsDevice);
basicEffect.VertexColorEnabled = true;
basicEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.TriangleList, enemy.GetCollisionTriangle.Triangle, 0, 3, enemy.GetCollisionTriangle.Indices, 0, 1)
Неужели мы не можем одновременно использовать spriteBatch и basicEffect, если игра не сильно отстает? он был протестирован на 3 разных компьютерах, от очень старого ноутбука до совершенно нового игрового ПК.
Игра не может быть воспроизведена с задержкой.