可移动的PictureBox透明于PictureBox

时间:2015-11-21 02:09:32

标签: vb.net picturebox transparent

我有两个PictureBox,一个是播放器控制(pic1),另一个是非移动(pic2)。我试图这样,当pic1超过pic2时,pic1的背景是透明的,所以我们可以看到pic2。目前,这就是我所拥有的。

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    pic2.BringToFront()
    pic1.BringToFront()
    If e.KeyData = Keys.D Then
        pic1.Left += 5
    End If
    If e.KeyData = Keys.A Then
        pic1.Left -= 5
    End If
    If e.KeyData = Keys.W Then
        pic1.Top -= 5
    End If
    If e.KeyData = Keys.S Then
        pic1.Top += 5
    End If
End Sub

有任何帮助吗?或者用我编码的方式是不可能的?

1 个答案:

答案 0 :(得分:0)

创建像这样的游戏的最好方法是使用像OpenGL,DirectX,XNA等,但你也可以使用GDI +和Graphics.DrawImage

但有一件事你应该知道,在编程时几乎没有什么是不可能的。 :)

这是我用于具有适当透明背景的图片框的解决方案。请记住,将图片框移到其他控件/图片框上可能会导致它滞后,因为它必须以递归方式重新绘制其背后的所有内容:

1)首先,创建一个自定义组件(在"添加新项目"在VS / VB中的菜单中找到)。

2)给它一个你选择的名字(例如:TransparentPictureBox)。

3)让它继承原始PictureBox

Public Class TransparentPictureBox
    Inherits PictureBox

End Class

4)将以下代码粘贴到类中:

Protected Overrides Sub OnPaintBackground(e As System.Windows.Forms.PaintEventArgs)
    MyBase.OnPaintBackground(e)

    If Parent IsNot Nothing Then
        Dim index As Integer = Parent.Controls.GetChildIndex(Me)

        For i As Integer = Parent.Controls.Count - 1 To index + 1 Step -1
            Dim c As Control = Parent.Controls(i)
            If c.Bounds.IntersectsWith(Bounds) AndAlso c.Visible = True Then
                Dim bmp As New Bitmap(c.Width, c.Height, e.Graphics)
                c.DrawToBitmap(bmp, c.ClientRectangle)
                e.Graphics.TranslateTransform(c.Left - Left, c.Top - Top)
                e.Graphics.DrawImageUnscaled(bmp, Point.Empty)
                e.Graphics.TranslateTransform(Left - c.Left, Top - c.Top)
                bmp.Dispose()
            End If
        Next
    End If
End Sub

此代码会覆盖PictureBox的OnPaintBackground事件,从而通过将背后的每个控件绘制到背景上来绘制自己的背景。

5)建立您的项目(如果您不知道如何,请参见下面的图片。)

6)从ToolBox中选择您的组件并将其添加到表单中。

希望这有帮助!

构建项目

在Visual Basic中打开Build菜单,然后按Build <your project name here>

Building a project

从工具箱中添加您的组件

Your component found in the ToolBox