私は現在C#でタイルベースのゲームを作っていますが、タイルを描画するたびに多くのCPUを使い、タイルが大きくなるにつれて(ゲームをフルスクリーンにすると)、それはもっと消費します。 これは私のタイルクラスです:Graphics.Drawを使用して効率的にタイルをレンダリングするには?
public class Tiles
{
//PRIVATE :
//variabiles
private int XPosition, YPosition;
private Image Texture;
private bool Colidable;
private int SizeW = 32;
private int SizeH = 32;
private Resizer resizer = new Resizer();
//methods
//PUBLIC :
//variabiles
//methods
//CONSTRUCTOR
public Tiles(int _x,int _y,Image _i, int _sW = 32, int _sH = 32, bool _c = false)
{
XPosition = _x;//set position X
YPosition = _y;//set position Y
SizeW = _sW;
SizeH = _sH;
Texture = resizer.ResizeImage(_i, SizeW, SizeH) ;// set texture
Colidable = _c;//set if the tile is colidable,default : false
resizer = null;
}
//DRAW METHOD
//gets graphics object to draw on, adn draws at the position of the tile
public void Draw(Graphics _g)
{
_g.DrawImage(this.Texture, this.XPosition, this.YPosition);
}
//GET PRIVATE MEBERS
//returns if the tile is colidable
public bool getColidable()
{
return this.Colidable;
}
}
、これは私がタイルを描く方法です:
private void DrawMap(Graphics _g)
{
//CALLS THE DRAW METHOD OF EACH TILE
for (int i = 0; i < MAP_WIDTH; i++)
{
for (int j = 0; j < MAP_HEIGHT; j++)
{
Tile[i, j].Draw(_g);
}
}
}
bool TilesUpdate = false;
private void _Window_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.Black);
if (isGameRunning)
{
DrawMap(e.Graphics);
}
else
{
FullRezolutionBtn.Draw(e.Graphics);
BigRezolutionBtn.Draw(e.Graphics);
NormalRezolutionBtn.Draw(e.Graphics);
}
}
private void Update_Tick(object sender, EventArgs e)
{
Invalidate();
}
私はマップが20×20のタイルであり、それがの50%前後をcosumingだことを言及したいと思いますcpuをフルスクリーンで表示します。
投稿したコードは大丈夫ですが、スピードアップの仕方はわかりません。スマートな無効化とスマートな描画を試してください(無効化された部分のみを描画します) –
パーツが無効になっているかどうかを確認するにはどうすればよいですか? –
'e.ClipRectangle.IntersectsWith(part.Rectangle)' –