我有两个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
有任何帮助吗?或者用我编码的方式是不可能的?
答案 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>
。
从工具箱中添加您的组件