0

誰かが次のトピックで私にアドバイスしてくれたらありがたいです:

メインフォームに次のイベントを実装した小さなWindowsフォームゲームアプリケーションを次のように準備しました。

Shown += (sender, e) => GameItem.Start();

関数Start()が、次のようなフォームにボールを描画する役割を果たしているとします。

  while (true)
     {            
        game.BoardUI.pboxBall.Location = new Point(X++, Y++);
        game.BoardUI.pboxBall.Image = global::BoringGame.Properties.Resources.redBall;
         Application.DoEvents();
     }

メインフォームは別のイベントを実装しました:

MouseMove += (sender, e) => Game.MoveBoard(e.X);

このイベントは、ボールが衝突して跳ね返るボードを描く責任があります。このイベントは非同期で機能しますが、描画されたボードが点滅しています。

描画されたマウスによる移動アイテムが点滅しないように、イベントmouseMoveを実装する方法を知りたいです。

   public void MoveBoard(int x)
     { 
        new Thread(() =>
        {
           game.BoardUI.pboxPaddle.Location = new Point(X, Y);
            game.BoardUI.pboxPaddle.Image = global::BoringGame.Properties.Resources.ballPad;
        }).Start();                
    }

使ってみましたSynchronizationContext UiSyncContext;

アプリを改善するにはどうすればよいですか。マウス移動イベントを提供するために別のスレッドが必要ですか?はいの場合、それをどのように使用しますか?描画が最適化されていない可能性があります-移動要素を描画するために別のコントロールを使用する必要があるかもしれません。現在、pictureboxを使用しています。

誰かがそのことについて私にアドバイスしてくれたら本当にありがたいです。

助けてくれてありがとう、解決策:

    //SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

    this.DoubleBuffered = true;
4

1 に答える 1

1

まばたきが問題になる場合は、移動するオブジェクトが消去されてから新しい位置に再描画されるまでの時間を最小限に抑えることができます。スレッド化はおそらく役に立ちません。itsme86が言うように、それはおそらくバッファリングの問題です。

于 2013-02-08T20:56:43.123 に答える