您好:我正在尝试创建一个显示移动球体的应用。应用程序将改变速度和方向。我尝试过Adobe Flash,但无法顺利完成。在这种情况下,平滑度至关重要。所以我正在尝试C#。
最初,我可以看到这可以通过以下方式实现: 1)创建球体的PictureBox,并使用Timer更改其坐标。要么 2)使用this.paint函数绘制一个实心圆,并以某种方式,使用计时器,擦除并重绘它。
有人可以推荐最佳路径吗?我将有一个主菜单,用户将选择速度/方向/多少等...然后只需显示"游戏窗口"与移动的球体。任何指导都将非常感谢。
仅在PC上显示。
由于 -Ed
答案 0 :(得分:0)
注意:根据您的需要,可以在winforms(在某些条件下)下实现流畅的动画,尽管您对所有内容负责。 wpf提供了一个动画框架,但wpf可能是一个里程碑更难。
如果您首先追求winforms或WPF,那可能无关紧要。您可以在winforms下学习基础知识,然后转到wpf。 wpf可能要求您在做任何事情之前先学习一下。
基本上它的作用是创建一个我们将首先绘制的屏幕外位图。它与UserControl的大小相同。控件的OnPaint
调用DrawOffscreen
传递附加到屏幕外位图的Graphics
。在这里,我们循环渲染可见的瓦片/天空,忽略其他瓦片/天空,以提高性能。
一旦完成所有操作,我们就会在一次操作中将整个屏幕外位图切换到显示屏。这有助于消除:
根据自上次更新后的时间计划更新所有图块的位置Timer
。这允许更逼真的运动并且避免在负载下的加速和减速。平铺在OnUpdate
方法中移动。
如果您在Timer1OnTick
的代码中注明,我会在设置动画后调用Invalidate(Bounds);
。这不会导致立即绘制,而是Windows会将绘制操作排队,以便稍后完成。连续的待处理操作将融合为一个。这意味着我们可以比重载期间的绘画更频繁地制作动画。 动画机制独立于绘画。这是一件好事,你不想等待油漆的发生。 xna做了类似的事情
答案 1 :(得分:-1)
这里有一些提示可以帮助您:
首先,您需要决定要定位哪个平台:WPF
或Winforms
。
然后你应该知道什么来移动 什么;一个不错的Bitmap
或只是空白背景的圆圈,或Bitmap
或Form
的控件。
在Winforms
中,您的方法都有效,尤其是如果你设置一个圆形区域see here作为一个例子。 (有趣评论中的部分!)
是的,Timer
是为球体设置动画的方法。顺便说一下,Panel
甚至Label
可以显示Bitmap
和PictureBox
一样。
如果您移动Form.Doublebuffered=true
,为了平稳移动,请务必设置Form
。如果您移动任何其他控件(PictureBox
除外),则需要子类才能访问DoubleBuffered
属性!
将移动项目的Location
作为PointF
保留在变量中并使用floats
作为其速度通常也是一个好主意,因为这样您就可以精细化速度和Location
更改以及Timer Intervals
!