私は基本的なウィンドウゲームをC#で作成していますが、画面の基本ビットマップを作成できません。私は、画面の上にパネルを持っていると私はそれを描くことができるようにしたいので、私は次のコードを使用しています:これは、それは私にエラーを与えて実行したときにC#bitmap - パラメータが無効です
public partial class GameWIndow : Form
{
public GameWIndow()
{
InitializeComponent();
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Bitmap buffer;
buffer = new Bitmap(Width, Height);
Task.Factory.StartNew(() =>
{
using (Graphics g = Graphics.FromImage(buffer))
{
g.FillRectangle(new SolidBrush(Color.PaleGoldenrod), 10, 10, 100, 100);
}
this.Invoke(new Action(() =>
{
this.BackgroundImage = buffer;
}));
});
}
ラインのための「パラメータが有効ではありません」を
buffer = new Bitmap(Width, Height);
幅と高さが900と700 respectivlyあり、そして両方の整数。
私がこれを完全に間違って実行しているという問題がある場合は、これを実現するにはどうすればよいでしょうか。
-------- -------編集
私はあなたのコメントを見ていると、それは私が上記の行っていることは非常に恐ろしいようですので、私は別のアプローチを試みたが、それがはるかに良いかどうかはわかりません。
private Game game;
private Thread renderThread;
private Stopwatch stopwatch = new Stopwatch();
public GameWindow()
{
InitializeComponent();
//Starts game
game = new Game();
//Starts rendering
this.DoubleBuffered = true;
renderThread = new Thread(new ThreadStart(draw));
renderThread.Start();
}
//Runs when screen is asked to refresh
private void panel1_Paint(object sender, PaintEventArgs e)
{
//Sends graphics to game class where it draws game
game.draw(e.Graphics);
}
private void draw()
{
stopwatch.Start();
while (true)
{
//If 1/60th of a sec has passed
if (stopwatch.ElapsedMilliseconds > 1000D/60D)
{
stopwatch.Restart();
Invalidate();
}
}
}
上記のコードは正常に実行されません、私はなぜ非常にわからない、と誰かがそれを助けることができれば、私はそれをいただければ幸いです。しかし、私の大きな問題は、それを修正する方法ではありませんが、これが効果的な、または "正しい"方法を描くことさえあれば。
問題は完全に間違っている可能性があります。なぜ私はあなたがそのエラーを取得しているのかは分かりませんが、作成されたスレッド以外のスレッドからGUIを変更することは禁止されています。 (もっと詳しく読むと、間違いなくこのエラーが発生するのではありませんが、ルールはそのまま適用されます) – adv12
何をしようとしていますか?これは少し疑わしいようです。 'PaintEventArgs'にはすでに描画するべき' Graphics'のインスタンスが含まれています。 – vcsjones
そのコントロールにダブルバッファースタイルを有効にした場合、最も簡単な方法で 'Paint'イベント処理コードを書くことができます。 –