WinForms/C#中的动画效果

3

我正在制作一个游戏,以下是相关的技术内容翻译。你可以看到,这个游戏的主要元素是由PictureBox[][]组成的空单元格矩阵。当我将硬币放入其中一列时,我希望它能向下落,但紫色遮罩会覆盖它,而灰色不会。我该如何实现这个效果?请注意,每个PictureBox控件中我都设置了BG Image。

我的游戏屏幕截图
3个回答

4

不要这样做。

创建自定义控件。在自定义控件中,覆盖Paint方法,然后先绘制COIN精灵,再在其上绘制遮罩层。确保在此处使用双缓冲绘图。

它会像魔术般地运行,相信我!

而且,由于你正在(我猜)构建五子棋游戏,你的自定义控件也将能够绘制已占用的插槽。

通过设计自定义控件,您将能够将所有动画和图形内容隐藏在主窗体之外。


1

我认为这样做是不可能的。WinForms中的控件不能透明,这就是问题所在。

我会考虑三个方向:

  1. 忘记控件,将所有内容绘制在窗体的OnPaint事件上。这并不太复杂(当然,如果要像你现在做的那样检测一些鼠标事件,就会更复杂,因为你不知道哪个灰色框被点击了,而只知道鼠标坐标)
  2. 尝试将窗体作为硬币(窗体可以是透明的)
  3. 可能使用WPF以相同的逻辑进行操作,因为在那里控件可以是透明的

1
Windows Forms中的控件可以是透明的。您需要将Form的TransparencyKey设置为一种您永远不打算使用的颜色(许多人似乎喜欢/讨厌品红色),然后将每个PictureBox的BackgroundColor设置为相同的颜色。结果应该是一个透明的PictureBox,其图像绘制在其上。我非常确定这不适用于BackgroundImage属性-只适用于Image属性。
这种方法可能会产生一个潜在的不良副作用,即您将能够通过PictureBox中的透明区域看到窗体后面的任何内容(桌面、其他应用程序窗口等)。

1
如果您将图形放在面板上,就不会出现“透视桌面”的问题。 - user677613

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接