我正在尝试使用C#/ winform制作像Chain Reaction(http://www.yvoschaap.com/chainrxn/)这样的游戏,但是我找不到一种让图像像效果一样平滑移动的方法在连锁反应。任何人都可以给我一些想法?
答案 0 :(得分:1)
在WinForms中实现任何类型的自定义绘图时,这是常见问题;无论是游戏,图表还是任何所有者绘制的控件。问题是默认情况下所有win表单控件都将DoubleBuffer属性设置为false。
将Form的DoubleBuffer属性设置为true将消除恼人的闪烁。
XNA是评论中建议的游戏开发的不错选择,但是为了快速修复WinForms,您可能需要做的就是将表单设置为使用double buffer进行绘制。
答案 1 :(得分:1)
上次我不得不在c#中使用定时器。 每个刻度都会增加/减少图像位置,如下所示:
image.Left += 1;
如果我没记错的话,它的工作做得很好,但我不确定它是否易于实施。
我希望无论如何都有帮助!祝你好运。
答案 2 :(得分:0)
在表单构造函数中添加以下行:
SetStyle( ControlStyles.ResizeRedraw, true );
SetStyle( ControlStyles.UserPaint, true );
SetStyle( ControlStyles.AllPaintingInWmPaint, true );
SetStyle( ControlStyles.OptimizedDoubleBuffer, true );
这有助于优化评估。
对于你的运动,你应该使用一个定时器,它以固定的时间率使控件无效......你必须在像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,在paint方法中你可以用这种方式绘制球:
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);
}
}