所以我在VB中制作游戏用于学习目的,现在我正在努力解决这个问题:
我正在尝试绘制水平贴图的For循环。但是,我似乎无法弄明白。这是我正在尝试做的一个例子:
For index as integer = 1 to 192
PictureBox(index).Image = bg(map(x,y)) 'this is causing me problems
x=x+1
if x=16 then
x=0
y=y+1
End If
Next
但是,由于PictureBox(索引).Image似乎不是正确的答案,它只会给我一个错误。
有没有办法做到这一点?
编辑:
很快,我需要将PictureBox.Image设置为1到192,不需要192行代码:
PictureBox1.Image = bg(map(0,0))
PictureBox2.Image = bg(map(1,0))
PictureBox3.Image = bg(map(2,0))
PictureBox4.Image = bg(map(3,0))
'etc....
相反,我不想在For循环中设置它们。我不想有额外的代码行。
EDIT2:
PictureBoxes将添加到编辑器中。
答案 0 :(得分:0)
我将在这里做出一个巨大的假设并假设您在到达此代码之前已经在表单上拥有PictureBox,并且他们拥有Id的PictureBox1到PictureBox192。代码如下所示。你需要:
1.通过其ID来检索元素
2.将其从对象转换/转换为PictureBox
3.适当地设置它的Image属性。
Dim pBox As PictureBox ' To store each pic box in
For index as integer = 1 to 192
pBox = Me.Controls.Find(PictureBox&&index) ' Try to find pic box by ID
If Not pBox Is Nothing Then ' If able to find element by this ID
DirectCast(pBox, PictureBox).Image = bg(map(x,y))
End If
x=x+1
if x=16 then
x=0
y=y+1
End If
Next
答案 1 :(得分:0)
在设计器中将每个Tag
的属性PictureBox
设置为传递给x
函数所需的y
和map
组成的字符串值
例如:
等等,直到您使用正确的值映射所有图片框。
然后您的代码可以更改为
' Assuming the PictureBox are all childs of the Form
For Each pic in Me.Controls.OfType(Of PictureBox)()
Dim tag = pic.Tag
' You could omit this check if you have only the pictureboxes
' set with a valid Tag property
if Not string.IsNullOrEmpty(tag) Then
Dim xyCoords = tag.ToString().Split(","c)
pic.Image = bg(map(Convert.ToInt32(xyCoords(0),
Convert.ToInt32(xyCoords(1))))
End if
Next