我们不能在VB.NET中第二次初始化字体吗?

我正在 VB.NET 中制作一个 2D游戏。我只使用一个字体对象在表单上绘制字符串。仅在游戏菜单中需要此字体。因此,我在不需要字体时进行处理,并在需要时再次对其进行初始化。

  

font_1 =新字体(“ Autobus Bold”,15.0)

当我使用此字体(font_1)在表单上绘制字符串时,出现此错误。

  

“ System.ArgumentException”类型的未处理异常发生在   System.Drawing.dll

     

其他信息:参数无效。

当我查看字体时,它会显示出来,

  

{名称=引用非共享成员需要引用对象。   大小= 15.0}

第一次加载游戏菜单(第一次初始化 font_1 时),不会发生此错误。当用户玩游戏时,将放置字体。当用户再次进入游戏菜单时,字体将再次初始化,然后再用于绘制。使用字体在窗口上绘制字符串时,会发生此错误。

似乎错误仅在字体系列内。我在几个论坛中都看到了这个问题,但是没有人提供解决方案。 (这是我在论坛上的第一个问题)

编辑:我删除了Font(font_1)。但是我仍然遇到同样的错误。这是绘制字符串的代码。

Private Sub mcFramesHandler_TIMER_Tick(sender As Object,e As EventArgs) Handles mcFramesHandler_TIMER.Tick

    gB.Clear(Color.Black)
    gB.DrawImage(Background_IMG,640,480)

    Select Case currentMode

        Case GameMode.OnGame
            If mcShoot_TIMER.Enabled Then gB.DrawImage(Bullet_IMG,Bullet_X,Bullet_Y,20,50)
            If mcEneshoot_TIMER.Enabled Then gB.DrawImage(EneBullet_IMG,EneBullet_X,EneBullet_Y,50)
            If Shooter_Lives Then gB.DrawImage(Shooter_IMG,Shooter_X,Bullet_Y_Def,100,105)
            If mcMoveEnemy_TIMER.Enabled Then gB.DrawImage(Enemy_IMG,Enemy_X,10,80)
            If mcExplode_TMER.Enabled Then gB.DrawImage(Explotion_IMG,Explotion_X,Explotion_Y,80)

        Case GameMode.Begining
            gB.DrawString("Start",New Font("Autobus Bold",15.0),textBrush(0),110,98) 'Error is generated in this line
            gB.DrawString("credits",textBrush(1),102,158)
            gB.DrawString("Exit",textBrush(2),114,218)

    End Select

    Me.CreateGraphics.DrawImage(backbuffer,480)

End Sub

此处textBrudh(0)是画笔。 gB是图形对象。 gB在绘制字符串之前成功绘制了背景图像。仅在显示游戏菜单时才会发生 非常感谢您的支持。

xinchengsoft 回答:我们不能在VB.NET中第二次初始化字体吗?

完成绘制后,您需要围绕Graphics放置所有对象,不仅是字体,还要放置所有对象(最好使用诸如下面的代码这样的封闭技术)

如果您需要新的Graphics实例,则可以在需要时立即创建它,而无需使用Global对象(使用Graphics时)。

     Using gB As Graphics = Me.CreateGraphics

        Using textBrush As Brush = Brushes.Black

            Using font_1 As Font = New Font("Courier New",15)

                gB.DrawString("Start",font_1,textBrush,400,98)

                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()
                'gB.DrawOtherthings()

            End Using

        End Using

    End Using
,

问题出在笔刷上(textBrush:笔刷数组)。当我将数组中的每个项目都放下并重新初始化时,好像它们发生了某些事情(就像它们不再是画笔了。再次看到错误。它说“参数无效”)。所以我只是将数组重新设置为0。

Redim textBrush (0)

这将清除以前的项目。然后,我重新调整数组的位置,以在需要时对其分别进行初始化。

Redim textBrush (2)
textBrush (0) = Brushes.Yellow
textBrush (1) = Brushes.Red
textBrush (2) = Brushes.Red

当按下向上和向下键时,此数组用于更改文本颜色。 我看到很多人在论坛中提到了这个错误

  

{名称=引用非共享成员需要引用对象。大小= 15.0}

我叫这个名字不是,但它不会影响程序。在任何字体中总是如此。

本文链接:https://www.f2er.com/3137138.html

大家都在问