如果我有一个类,它显示包含自己的绘图函数的字体和图像,该函数具有SpriteBatch.Being和.End
我还有另一个函数可以迭代绘制函数1000次! 我的问题是,这两行代码会降低性能:
spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
spriteBatch.End();
另一种方法是使用另一个管理绘图功能的类而不重复这两行代码1000次。
答案 0 :(得分:0)
我建议不要为每次抽奖调用开始和结束。 SpriteBatch将您的绘制调用放入队列中,因此您的绘图代码将被尽可能快地解释(您可以根据深度或纹理对sprite进行排序 - 例如SpriteBatch将执行所有脏工作)。 只有在开始和结束所有2D绘图时,或者当您更改SortMode等时,才应调用Begin和End。
答案 1 :(得分:0)
如果要绘制,只调用spritebatch开始和结束,但如果你绘制的方法在开始和结束块内,那么你不需要它。我建议为你的类制作一个“draw”方法,然后在Game1.Draw方法中你可以调用该方法,而不是在自定义类中调用它。 Game1.Draw是调用spritebatch.begin和end的地方,而不是自定义类。希望这有帮助!
答案 2 :(得分:0)
@Daniel G和@RaZeR RawByte有一点意见。但是,让我们说你想在地图上用霓虹灯效果绘制你的(让我们说)船只,并且所有的子弹都是像素化的。这意味着您将拥有两种SpriteBatch.Start()
类型。最好在课堂上分别绘制这两个类,以便他们使用(比如Level.cs)。你很可能只有Level.cs
的一个实例。
所以,而不是
public void Draw(SpriteBatch sp)
{
SpriteBatch.Begin(*whatever effect you want*);
SpriteBatch.Draw(*draw however you want*);
SpriteBatch.End();
}
在Ship.cs
和Bullet.cs
的每个实例中,让它们具有以下功能:
public void Draw(SpriteBatch sp)
{
SpriteBatch.Draw(*draw however you want*);
}
在Level&#39的函数Draw(SpriteBatch sp)
中放
public void Draw(SpriteBatch sp)
{
// Draw all ships
SpriteBatch.Begin(*whatever effects you want for ships*);
foreach(Ship s in shipList)
s.Draw(sp);
SpriteBatch.End();
// Draw all bullets
SpriteBatch.Begin(*whatever effects you want for bullets*);
foreach(Bullet b in bulletList)
b.Draw(sp);
SpriteBatch.End();
}
在Game1.cs
中,在绘制级别时,只需向其发送spriteBatch
变量,如下所示:myLevel.Draw(spriteBatch);
,而不在spriteBatch.Begin()
Draw
中调用Game1.cs
{1}}