在 C# 中以平滑的方式绘制移动球体的最佳方法



您好:我正在尝试创建一个将显示移动球体的应用程序。 应用程序将改变速度和方向。 我尝试过Adobe Flash,但无法使其流畅。 在这种情况下,平滑度至关重要。 所以我正在尝试 C#。

最初,我可以看到这可以通过以下方式实现:1(创建一个球体的图片框,并使用计时器更改其坐标。或2(使用this.paint函数绘制一个填充的圆,并以某种方式使用计时器擦除并重新绘制它。

有人可以推荐最佳路径吗? 我将有一个主菜单,用户可以在其中选择速度/方向/数量等...然后简单地显示带有移动球体的"游戏窗口"。 任何指导将不胜感激。

这只能在PC上显示。

谢谢-艾德

我刚刚在这里回答了一个类似的问题。

注意:根据您的需要,尽管您负责一切,但在winforms(在某些条件下(下可以实现流畅的动画。 WPF提供了一个动画框架,但WPF可能是一个更难的里程碑。

你应该先追求winforms还是WPF可能并不重要。 您可以说可以在winforms下学习基础知识,然后转到wpf。 WPF 可能需要您先学习很多东西,然后才能做任何事情。

总结

从本质上讲,这样做的作用是创建一个我们将首先绘制的屏幕外位图。 它的大小与用户控件的大小相同。 控件的OnPaint调用DrawOffscreen传入附加到屏幕外位图的Graphics。 在这里,我们只渲染可见的图块/天空,而忽略其他图块/天空,以提高性能。

完成所有操作后,我们将在一个操作中将整个屏幕外位图删除到显示器上。 这有助于消除:

  • 闪烁
  • 撕裂效应(通常与横向移动有关(
有一个

Timer计划根据自上次更新以来的时间更新所有磁贴的位置。 这允许更逼真的运动,并避免在负载下加速和减速。 切片在OnUpdate方法中移动。

如果您在代码中记下Timer1OnTick我会在对所有内容进行动画处理后调用Invalidate(Bounds);。 这不会导致立即绘制,而是 Windows 会将绘制操作排队以在以后完成。 连续的待处理操作将融合为一个。 这意味着我们可以在重负载下比绘画更频繁地对位置进行动画处理。 动画机制与绘画无关。 这是一件好事,你不想等待油漆发生。 xna做了类似的事情

请参考的完整SO答案以及示例代码

这里有

一些提示可以让你开始:

首先,您需要决定要定位哪个平台:WPFWinforms

然后你应该知道在什么地方移动什么;一个漂亮的Bitmap,或者只是一个圆圈,穿过一个空的背景,或者一个Bitmap或一个带有控件的Form

Winforms您的两种方法都将起作用,特别是如果您设置了一个圆形区域,请参阅此处的示例。(有趣的评论中的部分!

是的,Timer是制作球体动画的方式。顺便说一句,Panel甚至Label都可以像PictureBox一样显示Bitmap

为了平滑移动,请确保设置Form.Doublebuffered=true,如果您跨过Form。如果您在任何其他控件(PictureBoxLabel除外(之间移动,则需要对其进行子类化才能访问DoubleBuffered属性!

移动项目的Location保留在变量中作为PointF并使用floats作为其速度通常也是一个好主意,因为这样您就可以细粒度速度和Location变化以及Timer Intervals

相关内容

  • 没有找到相关文章

最新更新