Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C语言使图像平滑移动#_C#_Image - Fatal编程技术网

C# 如何使用C语言使图像平滑移动#

C# 如何使用C语言使图像平滑移动#,c#,image,C#,Image,我想做一个像连锁反应一样的游戏(http://www.yvoschaap.com/chainrxn/)使用C#/winform,但我无法找到一种方法使图像平滑移动,就像连锁反应中的效果。任何人都可以给我一些想法吗?这是在WinForms中实现任何自定义绘图时的常见问题,无论是游戏、图形,或任何所有者绘制的控件。问题是默认情况下,所有WinForms控件的DoubleBuffer属性都设置为False 将窗体的DoubleBuffer属性设置为True将消除这种恼人的闪烁 正如评论中所建议的那样,

我想做一个像连锁反应一样的游戏(http://www.yvoschaap.com/chainrxn/)使用C#/winform,但我无法找到一种方法使图像平滑移动,就像连锁反应中的效果。任何人都可以给我一些想法吗?

这是在WinForms中实现任何自定义绘图时的常见问题,无论是游戏、图形,或任何所有者绘制的控件。问题是默认情况下,所有WinForms控件的DoubleBuffer属性都设置为False

将窗体的DoubleBuffer属性设置为True将消除这种恼人的闪烁


正如评论中所建议的那样,XNA对于游戏开发来说是一个不错的选择,但是对于WinForms中的快速修复,您可能需要做的只是将窗体设置为使用绘图。

这是在WinForms中实现任何类型的自定义绘图时的常见问题,无论是游戏、图形还是任何所有者绘制的控件。问题是默认情况下,所有WinForms控件的DoubleBuffer属性都设置为False

将窗体的DoubleBuffer属性设置为True将消除这种恼人的闪烁


正如评论中所建议的那样,XNA对于游戏开发来说是一个不错的选择,但是对于WinForms中的快速修复,您可能需要做的就是将表单设置为使用绘制。在表单构造函数中添加以下行:

SetStyle( ControlStyles.ResizeRedraw, true );
SetStyle( ControlStyles.UserPaint, true );
SetStyle( ControlStyles.AllPaintingInWmPaint, true );   
SetStyle( ControlStyles.OptimizedDoubleBuffer, true );    
这将有助于优化重新设计

对于你的移动,你应该使用一个定时器,以固定的时间速率使控制失效。。。您必须将Calc保存在浮点结构中,如PointF,以避免在移动中闪烁

// This will move 30 pixels per second it rate is the elapsed time in seconds between calls to the update position method, and should move smooth :)
PointF Velocity = (30,0) * time_rate;  
PointF Pos = Pos + Velocity;
你应该只使用屏幕游戏的控件,可能是一个PictureBox,在绘画方法中,你可以这样画球:

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
   Graphics g = e.Graphics;

   foreach (Ball ball in balls)
   {
       ball.Update();
       g.FillEllipse(ball.Brush, ball.Pos.X - ball.Radius, ball.Pos.Y - ball.Radius, ball.Radius*2, ball.Radius*2);
   }
}

在表单构造函数中添加以下行:

SetStyle( ControlStyles.ResizeRedraw, true );
SetStyle( ControlStyles.UserPaint, true );
SetStyle( ControlStyles.AllPaintingInWmPaint, true );   
SetStyle( ControlStyles.OptimizedDoubleBuffer, true );    
这将有助于优化重新设计

对于你的移动,你应该使用一个定时器,以固定的时间速率使控制失效。。。您必须将Calc保存在浮点结构中,如PointF,以避免在移动中闪烁

// This will move 30 pixels per second it rate is the elapsed time in seconds between calls to the update position method, and should move smooth :)
PointF Velocity = (30,0) * time_rate;  
PointF Pos = Pos + Velocity;
你应该只使用屏幕游戏的控件,可能是一个PictureBox,在绘画方法中,你可以这样画球:

private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
   Graphics g = e.Graphics;

   foreach (Ball ball in balls)
   {
       ball.Update();
       g.FillEllipse(ball.Brush, ball.Pos.X - ball.Radius, ball.Pos.Y - ball.Radius, ball.Radius*2, ball.Radius*2);
   }
}

上次我不得不在c#中移动一些东西时,我使用了计时器。 每增加/减少一次勾号,图像位置如下:

image.Left+=1

如果我没记错的话,它做得很好,但我不确定它是否容易实现


我希望这对你有帮助!祝你好运。

上次我不得不用c#移动东西时,我用定时器。 每增加/减少一次勾号,图像位置如下:

image.Left+=1

如果我没记错的话,它做得很好,但我不确定它是否容易实现


我希望这对你有帮助!祝你好运。

是的,不要使用WinForms你可以使用XNA框架进行游戏创作这是你的问题,它不能从a平稳地移动到b,或者不能从球平稳地旋转到爆炸?看看XNA游戏工作室:我尝试了双缓冲区和定时器+改变坐标,但仍然有闪烁,不如连锁反应好是的,不要使用WinForms你可以使用XNA框架进行游戏创作这是你的问题,它不能从a平滑地移动到b,或者它不能从一个球平滑地旋转到爆炸?看看XNA游戏工作室:我尝试了双缓冲和定时器+改变坐标,但仍然有闪烁,不如连锁反应那么好。我想用MFC制作这个游戏。在最初的帖子中,你提到要用C#和WinForms制作这个游戏。MFC是一个很大的区别。无论如何,看看这个:无论如何谢谢你的建议。WinForm是我的第一选择,但很多人告诉我MFC更适合这个游戏。MFC几乎完成了这个游戏。我正在尝试用MFC制作这个游戏。在你提到的原始帖子中,我想用C#和WinForms制作这个游戏。MFC是一个很大的区别。无论如何,看看这个:无论如何谢谢你的建议。WinForm是我的第一选择,但很多人告诉我MFC更适合这个游戏。MFC几乎完成了游戏。