繁体   English   中英

在C#中以流畅的方式绘制运动球体的最佳方法

[英]Best way to draw moving sphere in a smooth way in C#

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

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

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

仅在PC上显示。

谢谢-编辑

我只是在这里 回答了类似的问题。

注意 :根据您的需要,尽管您负责所有工作,但仍可以在 (在某些条件下)下实现流畅的动画。 提供了动画框架,但可能更难实现。

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

摘要

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

完成所有操作后,我们只需一次操作即可将整个屏幕外位图转换为显示内容。 这有助于消除:

  • 闪烁
  • 撕裂效果(通常与横向移动有关)

有一个Timer ,该Timer计划根据自上次更新以来的时间更新所有图块的位置。 这样可以实现更逼真的运动,并避免负载下的加速和减速。 OnUpdateOnUpdate方法移动。

如果您在Timer1OnTick的代码中Timer1OnTick我将调用Invalidate(Bounds); 动画一切之后。 这不会导致立即进行绘制,而是Windows将在以后的某个时间排队进行绘制操作。 连续的待处理操作将融合为一个。 这意味着在重负载下,我们可以比绘画更频繁地对位置进行动画处理。 动画技工独立于颜料 那是一件好事,您不想等待油漆的出现。 做类似的事情

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

以下是一些提示,助您一臂之力:

首先,您需要确定目标平台: WPFWinforms

那么你应该知道 什么移动; 一个不错的Bitmap或者是一个空背景上的圆圈,或者是Bitmap或带有控件的Form

Winforms两种方法都可以使用,尤其是。 如果您设置圆形区域, 请参见此处的示例。 (有趣的评论部分!)

是的, Timer是对球体进行动画处理的方式。 顺便说一句, Panel甚至Label都可以显示Bitmap以及PictureBox

为了平稳移动,请确保在Form移动时设置Form.Doublebuffered=true 如果在任何其他控件( PictureBoxLabel除外)上移动,则需要对其进行子类化以访问DoubleBuffered属性!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM