C#将PictureBox移动到其他具有透明背景的PictureBox上

时间:2016-06-08 23:39:16

标签: c# draw move picturebox transparent

我的目标是制作跳棋游戏,用户可以在棋盘上移动棋子。

我制作的电路板来自DataGridView类。

现在我正在做的是为每个具有透明背景的检查器创建图片框,当用户移动所选择的检查器时,我正在为他设置BringToFront。

问题是"透明"效果实际上是相对于父控件,所有检查器的父级是DataGridView。

因此结果是当有2个棋子重叠时,没有透明效果。

Example of my problem image

我有一些解决方案但是它占用了大量内存并且甚至在不在UI线程中的线程上都冻结了。

我的解决方案是让一个大面板(所有检查器的父母)的背景是在移动检查器的同时构建客户端屏幕截图和更改。

这样做的正确方法是什么?我正在寻找和尝试系泊网上的解决方案):请帮忙!

编辑:

差不多完成了:

https://youtu.be/nyhfIOzqeY8

2 个答案:

答案 0 :(得分:0)

如果你要使用图片我不会使用透明度。每个应用程序的透明度都较慢。

让我们考虑一下替代解决方案。一个方格可以有多少个州?原色方块可以是空的,或者顶部有红色或黑色。替代的彩色方块上没有任何一块。

这共有4个州。因此4个图像可以在spritesheet上分开或组合。然后你只需要根据其状态切换图片。主要为空,主要为红色,主要为黑色或交替的彩色方块。

如果你想要一个花哨的边框,如果你一块一块地构建它,你可以在后面或旁边使用一个图像。

答案 1 :(得分:0)

因此,如果将来有人需要帮助解决这个问题。

  1. 创建您的控件(在我的情况下,它是图片框)
  2. 将所有控件添加到MainControl(willywonkadailyblah,谢谢!!!)
  3. 将所有控件父级设为MainControl
  4. 这是诀窍,当你移动控制鼠标按下从移动的控件移除图像时,取屏幕后移动控制他的图像,设置MainControl图像来保持此屏幕拍摄。 。 。现在你可以移动控件,并且他对所有其他控件都是透明的,因为他是父控件。
  5. https://youtu.be/PUEyZPhPTlc

    (: