【发布时间】:2016-03-29 08:44:09
【问题描述】:
我目前正在用 c# 制作基于图块的游戏,但每次绘制图块时都会占用大量 CPU,并且随着图块变大(如果我将游戏设为全屏)消耗更多。 这是我的 Tile 类:
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 x 20 的图块,全屏时它消耗了大约 50% 的 CPU。
【问题讨论】:
-
您发布的代码看起来不错,我不知道如何加快速度。尝试智能失效和智能绘图(即仅绘制失效部分)
-
如何检查零件是否失效?
-
e.ClipRectangle.IntersectsWith(part.Rectangle) -
抱歉,我不明白智能失效是如何工作的……我尝试过裁剪,我可以渲染地图的智能部分。你能举个例子说明
ClipRectangle.IntersectsWith(part.Rectangle)是如何工作的吗? -
当然。你会在屏幕上移动那些瓷砖吗?或者上面的东西?还是换头像?