[英]Best way to draw moving sphere in a smooth way in C#
您好:我正在尝试创建一个显示移动球体的应用程序。 应用程序将改变速度和方向。 我已经尝试过Adobe Flash,但无法使其流畅。 在这种情况下,光滑度至关重要。 所以我正在尝试C#。
最初,我可以看到这可以通过以下方式实现:1)创建一个球的PictureBox,并使用Timer更改其坐标。 或2)使用this.paint函数绘制一个实心圆,并使用计时器以某种方式擦除并重新绘制它。
有人可以推荐最好的选择吗? 我将有一个主菜单,用户将在其中选择速度/方向/数量等...,然后简单地显示带有移动球体的“游戏窗口”。 任何指导将不胜感激。
仅在PC上显示。
谢谢-编辑
注意 :根据您的需要,尽管您负责所有工作,但仍可以在winforms (在某些条件下)下实现流畅的动画。 wpf提供了动画框架,但wpf可能更难实现。
您应该先追求Winforms还是WPF,这可能并不重要。 您可以说可以在winforms下学习基础知识,然后转到wpf 。 wpf可能需要您学习很多知识,然后才能做任何事情。
本质上,此操作是创建一个屏幕外位图,我们将首先绘制该位图。 它与UserControl的大小相同。 控件的OnPaint
调用DrawOffscreen
传递附加到屏幕外位图的Graphics
。 在这里,我们只渲染可见的图块/天空,而忽略其他图块/天空,以提高性能。
完成所有操作后,我们只需一次操作即可将整个屏幕外位图转换为显示内容。 这有助于消除:
有一个Timer
,该Timer
计划根据自上次更新以来的时间更新所有图块的位置。 这样可以实现更逼真的运动,并避免负载下的加速和减速。 磁OnUpdate
以OnUpdate
方法移动。
如果您在Timer1OnTick
的代码中Timer1OnTick
我将调用Invalidate(Bounds);
动画一切之后。 这不会导致立即进行绘制,而是Windows将在以后的某个时间排队进行绘制操作。 连续的待处理操作将融合为一个。 这意味着在重负载下,我们可以比绘画更频繁地对位置进行动画处理。 动画技工独立于颜料 。 那是一件好事,您不想等待油漆的出现。 xna做类似的事情
以下是一些提示,助您一臂之力:
首先,您需要确定目标平台: WPF
或Winforms
。
那么你应该知道要 跨什么移动; 一个不错的Bitmap
或者是一个空背景上的圆圈,或者是Bitmap
或带有控件的Form
。
在Winforms
两种方法都可以使用,尤其是。 如果您设置圆形区域, 请参见此处的示例。 (有趣的评论部分!)
是的, Timer
是对球体进行动画处理的方式。 顺便说一句, Panel
甚至Label
都可以显示Bitmap
以及PictureBox
。
为了平稳移动,请确保在Form
移动时设置Form.Doublebuffered=true
。 如果在任何其他控件( PictureBox
或Label
除外)上移动,则需要对其进行子类化以访问DoubleBuffered
属性!
将移动项的Location
保留在变量中作为PointF
并使用floats
作为其速度通常也是个好主意,因为这样您可以细化速度和Location
变化以及Timer Intervals
!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.