我將不勝感激,如果有人能以下主題中指點我:良好做法,模式而實現異步2D的WinForms元素
我準備小Windows窗體其主要形式以這種方式實施了以下事件的遊戲應用:
Shown += (sender, e) => GameItem.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);
這個事件負責繪圖板的球colide和彈跳。 此事件異步工作,但畫板正在閃爍。
我想知道如何實現事件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;
這聽起來像你想創建一個計時器,每隔一段時間你的圖像移動一個固定的數量。 – Servy 2013-02-08 20:53:15
如果您提出具體問題,最好。像「爲什麼我的遊戲在閃爍?」如果我們在解決這個問題之前必須閱讀十三段,很多人都不會去幫助。 – Jay 2013-02-08 20:53:28
你的窗體的DoubleBuffered屬性是否設置爲「true」? – itsme86 2013-02-08 20:54:54