我正在创建一个简短的游戏,在该游戏中,用户在窗体上移动图片框并朝着设置的目标工作。我已经能够更改我的角色在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
...等,但是我认为我的知识上有差距或逻辑上有缺陷,因为我无法完成这项工作。如果有人可以提供帮助,我相信实际上答案很简单,那么我非常感谢您的时间和回答。谢谢!
答案 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