2015-03-25 44 views
0

你好所有即時通訊創建一個遊戲,用戶可以拖放pictureboxes.I設法做到這一點,但我不喜歡當你拖放一個picturebox時它的行爲。有了這個代碼在C中拖放n下降行爲#

private void myPictureBox_MouseDown(object sender, MouseEventArgs e) 
    { 
     isDragging = true; 
     currentX = e.X; 
     currentY = e.Y; 
    } 

    private void myPictureBox_MouseMove(object sender, MouseEventArgs e) 
    { 
     Control control = (Control)sender; 
     if (isDragging) 
     { 
      control.Top = control.Top + (e.Y - currentY); 
      control.Left = control.Left +(e.X - currentX); 
     } 
    } 

    private void myPictureBox_MouseUp(object sender, MouseEventArgs e) 
    { 
     isDragging = false; 
    } 

它像this (video 1)所以我把一個.update()把它

private void myPictureBox_MouseDown(object sender, MouseEventArgs e) 
    { 
     isDragging = true; 
     currentX = e.X; 
     currentY = e.Y; 
    } 

    private void myPictureBox_MouseMove(object sender, MouseEventArgs e) 
    { 
     Control control = (Control)sender; 
     if (isDragging) 
     { 
      control.Top = control.Top + (e.Y - currentY); 
      control.Left = control.Left +(e.X - currentX); 
      control.update(); 
     } 
    } 

    private void myPictureBox_MouseUp(object sender, MouseEventArgs e) 
    { 
     isDragging = false; 
    } 

但由於其在循環,如果其行爲很像0​​。做你有什麼建議嗎?提前致謝。

+0

表單的背景圖像非常緩慢地繪製,因此您可以看到尚未透支的像素的幻影。一般建議[在這裏](http://stackoverflow.com/a/2613272/17034)。 – 2015-03-25 10:56:57

+0

Hans Passant非常感謝你.tha再次修復它 – valentinosael 2015-03-25 11:03:17

回答

0

嘗試設置雙緩衝所有pictureboxes和他們在

SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
SetStyle(ControlStyles.OptimizedDoubleBuffer, true); 

如果你需要做的是不工作的繪製自己(心不是硬)儘量使用雙緩衝設置的控制。

0

我試圖重現你正在經歷的東西。

當圖片框具有帶背景的窗體時,會出現與您的視頻相同的效果。當皮特羅盒子有一個圖片框作爲背景時,它運行得更好一點。但是,我無法使控制背景透明。

繪製自己的控件的解決方案可以工作。

我的建議是,如果你真的在創造一個遊戲。使用已經成功的遊戲引擎如Unity,XNA可以提高您的工作效率。