C# 新华社。如何构建它,以便尽可能少地使用spritebatch开始/结束语句
我在XNA做一个2d游戏。我一开始使用了可拖动的游戏组件,非常高兴。每个精灵都是从可绘制的游戏组件中派生出来的,每个精灵都有自己的开始/结束语句(甚至每个组成墙的瓷砖)。 我在读了一点之后意识到,这是一种不好的表现方式 现在我想知道做这件事的好方法是什么。。。 让我们假设我在游戏中的每个房间C# 新华社。如何构建它,以便尽可能少地使用spritebatch开始/结束语句,c#,performance,architecture,xna,spritebatch,C#,Performance,Architecture,Xna,Spritebatch,我在XNA做一个2d游戏。我一开始使用了可拖动的游戏组件,非常高兴。每个精灵都是从可绘制的游戏组件中派生出来的,每个精灵都有自己的开始/结束语句(甚至每个组成墙的瓷砖)。 我在读了一点之后意识到,这是一种不好的表现方式 现在我想知道做这件事的好方法是什么。。。 让我们假设我在游戏中的每个房间 _spritebatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque,
_spritebatch.Begin(SpriteSortMode.Deferred,
BlendState.Opaque,
SamplerState.LinearClamp,
DepthStencilState.Default,
RasterizerState.CullNone,
null,
_camera.Transform);
for (each block in Blocklist)
{
_spritebatch.Draw(block._txture,
block._position + block._centerVect,
block.txtrect, block._color,
(float)block.txtrot,
block._centerVect,
1.0f,
SpriteEffects.None,
0f);
}
_spritebatch.End();
我要问的原因是我必须公开每个街区的字段,这样Room类可以让它们做它的spritebatch.Draw,例如block
我认为这并不重要,性能也会提高,但是有没有更好的体系结构可以推荐给大家呢
还有,既然代码在上面,有人能对我使用的SpriteBatch.beginparamaters进行评论吗?他们是最快的吗?我所需要的只是转换
我要问的原因是我必须在每个
封锁公共区域,以便Room类可以让他们做自己的事情
_spritebatch.绘图,例如块。\u位置
假设您有许多房间,每个房间中有许多块,可以为每个房间和每个块指定一个public或protected Draw()方法,那么块的所有字段都不需要是public
class Block
{
... // private fields about Block
...
Public void Draw(GameTime gt, SpriteBatch sb)
{
sb.Draw(private block fields here);
}
}
那么房间呢
class Room
{
... // private fields about room
...
List<Block> blocks;
Public void Draw(GameTime gt, SpriteBatch sb)
{
sb.Draw(private room fields here);
foreach(Block b in blocks)
b.Draw(gt, sb)
}
}
教室
{
…//关于房间的私人字段
...
列表块;
公开无效抽签(游戏时间gt,SpriteBatch sb)
{
某人画(这里是私人房间);
foreach(块中的块b)
b、 抽签(gt、sb)
}
}
然后在游戏课上
//fields section
List<Room> rooms;
// in the Draw
spriteBatch.Begin();
foreach(Room r in rooms)
r.Draw(gt, spriteBatch);
spriteBatch.End();
//字段部分
列出会议室名单;
//平局
spriteBatch.Begin();
foreach(房间中的r房间)
r、 绘制(gt、spriteBatch);
spriteBatch.End();
在这个场景中,整个框架只有一个开始/结束块。对于典型的面向对象体系结构来说,这似乎是一个非常好的问题,感谢!我曾尝试过类似的方法,但效果并不理想。。如果调用后未将spritebatch对象传递给blocks draw函数,则开始它将不起作用。(即使block对象有一个引用同一个spritebatch的字段)…还有一件事,你是否因为某种特殊原因而跳过游戏时间?