如何创建变量以跟踪在PictureBox中设置为“ image”属性的图像?

时间:2018-10-30 00:41:12

标签: vb.net

我正在创建一个简短的游戏,在该游戏中,用户在窗体上移动图片框并朝着设置的目标工作。我已经能够更改我的角色在KeyPress事件中面对的方向;但是,我无法通过更改整数变量来使用计时器为该图片框设置动画,并且由于我已经在作为计时器的循环内进行操作,因此无法创建另一个循环。由于我是新手程序员,因此对于任何编码都非常陌生,因此跟踪图片框中当前设置的图片的方法对我来说是未知的,我对此进行了研究,但无济于事。

这是我更改最初在KeyPress上的图片框中显示的图像并移动图片框的方式:

If aKey or leftKey Then
    picPlayer.BackgroundImage = My.Resources.PlayerRightStand

    'If this is an okay movement, then move
    If picPlayer.Left -= speed >= 0 Then
        picPlayer.Left -= speed

    End If
End If

我已经尝试过跟踪当前设置为picPlayer的背景的图像:

If picPlayer.BackgroundImage Is My.Resources.playerRightStand Then
    image = 1

...等,但是我认为我的知识上有差距或逻辑上有缺陷,因为我无法完成这项工作。如果有人可以提供帮助,我相信实际上答案很简单,那么我非常感谢您的时间和回答。谢谢!

2 个答案:

答案 0 :(得分:0)

您尝试的操作可能无法正常工作,因为My.Resources每次访问新对象都会起作用。这意味着即使My.Resources.PlayerRightStand Is My.Resources.PlayerRightStand也会得出False

这意味着,即使不考虑您的特定问题,通常也不应在常规代码中使用My.Resources,而应直接从My.Resources分配给某个字段,然后在代码中使用该字段,例如

Private playerRightStand As Image = My.Resources.PlayerRightStand

这样,您可以确保只提取一次数据,这也意味着您可以随时将Image的{​​{1}}属性与该字段进行比较,并获得预期的结果。所以:

PictureBox

和:

If aKey or leftKey Then
    picPlayer.BackgroundImage = playerRightStand

    'If this is an okay movement, then move
    If picPlayer.Left -= speed >= 0 Then
        picPlayer.Left -= speed

    End If
End If

您还可以考虑创建一个数组并将所有If picPlayer.BackgroundImage Is playerRightStand Then image = 1 放入其中。然后,您可以使用Images来获取任何特定Array.IndexOf的索引,也可以将当前Image的索引存储在一个字段中,这意味着您不必继续比较Image个引用。

答案 1 :(得分:0)

我认为您应该使用变量来存储当前状态,而不是跟踪图像。这有很多优点:

  • 您可以跟踪很多状态,即使那些与特定图像/动画无关的状态
  • 您可以将同一张图片用于不同的状态
  • 您可以在不包含所有图像/动画的情况下编写逻辑代码,然后稍后实施图形
  • 您可以更改图形资源,图像,名称而无需更改逻辑

由于您还具有不同的框架,因此可以按照jmcilhinney的建议存储Arrays。 您可以为此使用一个枚举:

Public Enum Status
    rightStand
    leftStand
    jumping
    crouching
    NONE
End Enum

您可以存储以前的状态和新的状态(知道是否需要更改图像或循环播放动画):

Public previousStatus As Status = Status.NONE
Public newStatus As Status = Status.NONE

然后,您具有状态更改逻辑(只是示例):

Public Sub changeStatus()

    If leftKey Then
        newStatus = Status.leftStand
    ElseIf rightKey Then
        newStatus = Status.rightStand
    End If

End Sub

还有图像修改逻辑(如果要动画循环,则需要在这部分上做更多的工作):

Public Sub applyImage()

    If previousStatus = newStatus Then Exit Sub

    Select Case New Status
        Case Status.crouching
            picPlayer.BackgroundImage = playerCrouching
        Case Status.jumping
            picPlayer.BackgroundImage = playerJumping
        Case Status.leftStand
            picPlayer.BackgroundImage = playerLeftStand
        Case Status.rightStand
            picPlayer.BackgroundImage = playerRightStand
    End Select

End Sub