2015-03-25 43 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可以提高您的工作效率。