1
私は現在ゲーム用の2dタイルマップを作成中です。それを行うために、私はタイルでいっぱいの2dArrayを作った。これらのタイルは、画像が格納されたクラスです。Graphics.DrawImage 2dtilemapパフォーマンスの問題
私はマップ上にスプライトを移動するたびに、マップは1msごとにそれ自身を再描画する必要があります(私はそれを行う理由があります)。しかし、それは遅すぎる...今は30fpsで動いているし、何をすべきかわからない。私は多くのことを試しましたが、結果は同じです。/
これは私がマップを作る方法です:ここ
public void makeBoard()
{
for (int i = 0; i < tileArray.GetLength(0); i++)
{
for (int j = 0; j < tileArray.GetLength(1); j++)
{
tileArray[i, j] = new Tile() { xPos = j * 50, yPos = i * 50 };
}
}
}
私はそれぞれ1ミリ秒を再描画、私はそれがあまりにも仕事を得ることができないので、私は本当に、このいずれかで助けを必要と
これはティムです
private void Wereld_Paint_1(object sender, PaintEventArgs e)
{
//label1.Text = k++.ToString();
using (Graphics grap = Graphics.FromImage(bmp))
{
for (int i = 0; i < tileArray.GetLength(0); i++)
{
for (int j = 0; j < tileArray.GetLength(1); j++)
{
grap.DrawImage(tileArray[i, j].tileImage, j * 50, i * 50, 50, 50);
}
}
grap.DrawImage(player.movingObjectImage, player.xPos, player.yPos, 50, 50);
grap.DrawImage(enemyGoblin.movingObjectImage, enemyGoblin.xPos, enemyGoblin.yPos, 50, 50);
groundPictureBox.Image = bmp;
// grap.Dispose();
}
}
:タイルとスプライト以上
private void UpdateTimer_Tick(object sender, EventArgs e)
{
if(player.Update()==true) // true keydown event is fired
{
this.Invalidate();
}
label1.Text = lastFrameRate.ToString(); // for fps rate show
CalculateFrameRate(); // for fps rate show
}
あなたは、いくつかの最適化を試みることができます。特定の間隔でER –
1.あなたのイメージのピクセルフォーマットを確認してください。描画での画像変換を避けるには、Format32bppARGBである必要があります。 2.描画コンテキストの設定を調整します。キーワードを探します。sourceOver、SourceCopy、NearestNeighbour、AntiAliased 3. Draw Image unscaledを使用します。これは描画イメージより高速です。しかし、gdiを使って1msのリフレッシュを達成できないのではないかと心配しています。 –
@ThomasVoßAllrightありがとうございました。しかし、私はすでにそのすべてを試しているとスケールされていないので、それは私にとってはるかに悪くなります。だから私はWindowsフォームでこの問題に何もできないと思いますか? –