我正在为一个类项目创建一个Visual Basic的刽子手游戏,并且我创建了一个函数,当您在单词中的适当位置猜测正确的字母时,该函数会绘制一个字符串。我的问题是,每当我进行新的猜测时,它都会删除旧图形并添加新图形。我需要一种方法来保存我绘制的图形,有人知道吗?
Dim newCharArray() As Char = wordArray(rndNumber).ToCharArray
For i As Integer = 0 To (wordArray(rndNumber).Length - 1) Step 1
If TextBox1.Text = newCharArray(i) Then
correctLetter = newCharArray(i)
letterPos = i
Me.Refresh()
End If
Next
Dim drawFont As New Font("Microsoft YaHei UI", 16)
Dim drawBrush As New SolidBrush(Color.Black)
Dim drawString As [String] = CStr(correctLetter)
Dim drawPoint As New PointF(x:=(x1 + 4) + (letterPos * 40), y:=363)
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawPoint)
问题是Paint
方法每次都负责从头开始绘制整个内容。
我会维护所有正确字符及其位置的列表,并在每次Paint
方法中绘制它们。
或者,您可以将每个字符绘制到一个Bitmap
,然后在 Paint
方法中绘制位图,如下所示:
Private canvas As Bitmap = New Bitmap(Me.ClientRectangle.Width, Me.ClientRectangle.Height)
...
Dim newCharArray() As Char = wordArray(rndNumber).ToCharArray
For i As Integer = 0 To (wordArray(rndNumber).Length - 1) Step 1
If TextBox1.Text = newCharArray(i) Then
correctLetter = newCharArray(i)
letterPos = i
Me.Refresh()
End If
Next
...
Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim drawFont As New Font("Microsoft YaHei UI", 16)
Dim drawBrush As New SolidBrush(Color.Black)
Dim drawString As [String] = CStr(correctLetter)
Dim drawPoint As New PointF(x:=(x1 + 4) + (letterPos * 40), y:=363)
Using g As Graphics = Graphics.FromImage(Me.canvas)
g.DrawString(drawString, drawFont, drawBrush, drawPoint)
End Using
e.Graphics.DrawImage(Me.canvas, New Point(0, 0))
End Sub