質問: canvas; ``` 【引用】 http://dobon.net/vb/dotnet/graphics/drawimage.html [描画先とするImageオブジェクトを作成する] のところの canvas を2つ作って 敵キャラと自キャラを分けています。 --- 同じ canvas 内だと、画像はちらつかないのですが、 「追加情報:オブジェクトは現在他の場所で使用されています。」 というエラーが出たのでうまくできませんでした。 --- また、【C#におけるダブルバッファリング(画像表示の場合)】 http://home.a00.itscom.net/hatada/csharp/image/doublebuffering01.html も試してみたのですが、改善しません。 --- 自分が操作するキャラを動かすと、敵キャラが映らなくなってしまうこの現象の なにか上手な解決策はありませんか?
回答: こんばんわ。 そもそも、Timerクラスの使用法が怪しいですね。 ``` namespace sample { public partial class Form1 : Form { Timer timer1 { get; set; } Image img0 { get; set; } Image img1 { get; set; } PictureBox pictureBox1 { get; set; } public Form1() { InitializeComponent(); img0 = Image.FromFile(@".\images\0.bmp");//床の画像 img1 = Image.FromFile(@".\images\4.bmp");//敵キャラの画像 // このへん適当です pictureBox1 = new PictureBox(); pictureBox1.Paint += pictureBox1_Paint; timer1 = new Timer(); timer1.Interval = 1000; timer1.Tick += timer1_Tick; // タイマー処理イベントメソッドの登録 timer1.Enabled = true; // Timerクラスは、デフォでは Falseになっている timer1.Start(); } /// /// タイマー処理 /// void timer1_Tick(object sender, EventArgs e) { // ここにキー入力やキャラの移動のタイマー処理を書く // 描画処理はここには書かない。無限ループするような処理は書かない。 pictureBox1.Invalidate(); } /// /// 描画処理 /// private void pictureBox1_Paint(object sender, PaintEventArgs e) { // ここに描画処理を書く // キャラの移動結果などを見て描画するデータを作成して描画する。 } /// /// フォームクローズ時の処理 /// private void Form_FormClosing(object sender, FormClosingEventArgs e) { // 解放処理などを書く timer1.Stop(); timer1.Dispose(); img0.Dispose(); img1.Dispose(); pictureBox1.Dispose(); } } } ``` だいぶ手を加える事になるかと思いますが、前回の回答はこんな感じです。