我一直在使用这个剧本绘制线条,但它确实有效,但是当我运行游戏时,它开始耗尽我的资源,就像没有人一样。
public static void DrawLine(Vector2 start, Vector2 end, Color color, int width, float alpha, float depth)
{
// GraphicsDevice stored in other class
var texture = new Texture2D(Graphics2D.GraphicsDevice, 1, 1);
texture.SetData(new[] { color });
Vector2 edge = end - start;
float angle = (float)Math.Atan2(edge.Y, edge.X);
// SpriteBatch stored in other class
Graphics2D.SpriteBatch.Draw(
texture,
new Rectangle(
(int)start.X,
(int)start.Y,
(int)edge.Length(),
width),
null,
Color.White,
angle,
new Vector2(0, 0),
SpriteEffects.None,
1.0f);
}
一旦开始绘制线条,内存和CPU使用率就会开始飙升。
有没有猜测为什么要这样做?我是否应该过度关注?或者对于这些操作来说这是正常的。
答案 0 :(得分:0)
正如@Norris在评论中提到的那样,在Initialize处创建纹理,然后重复使用它。
它占用CPU的原因是因为你从零开始创建一个全新的纹理。这很重要,因为你要求GPU保留内存和电源以创建一个新的纹理,使用单帧,再次处理它,然后重复下一帧。在对大型图像进行一些更改时,Photoshop有进度条的原因。
即使它不是cpu密集型的,如果你不必要的话,每帧都重新创建一些东西是不好的做法。始终尽可能多地重复使用。这适用于所有类型的应用程序,但由于60fps绘制循环,在游戏开发中尤为重要。关于唯一不适用的对象是基本的值类型,例如Ints,Floats,Vector3,Matricies等。除非这些值基于每帧需要进行的计算。
总结:始终尽可能少地完成预期目标