我创建了一个有趣的结构“列表”。那些结构包含一些数组(动态),我想ReDim它们。但是我收到一个错误:“3D Cube.exe中出现类型'System.NullReferenceException'的第一次机会异常”和“对象引用没有设置为对象的实例。”。 />
这就是代码的样子(你可以看到它看起来像opengl):
模块:
case
THE CLASS (我没有包含课程的第一部分和许多潜艇和功能):
Public Module _3DDefinitions
Public Pen1 As New System.Drawing.Pen(Color.White, 2)
Public Structure VertexesObjects
Dim Face() As Faces
Dim FaceCount As Double
Dim Position As DPoint ''Translated Position
Dim NPPF As Integer ''NumberofPointsPerFace
End Structure
Public Structure Faces
Dim PointVertexes() As _3DDefinitions.DPoint
Dim PointCount As Double
Dim FaceColor As Color
End Structure
Public Structure DPoint
Dim X As Single
Dim Y As Single
Dim Z As Single
End Structure
Enum GL_LoadAction As Byte
GL_Start = 1 ''Start- equivalent of GlBegin
GL_End = 2 ''End-equivalent of GlEnd
End Enum
Enum GL_EnableAction As Byte
GL_UseDefaultUnit = 1
GL_UseOwnUnit = 2
GL_Translation = 4
End Enum
End Module
子 LoadVertex3D 只是在内存中加载一些点(坐标)(使用结构),子 GL_LoadVertexes 告诉类用户想要加载3d对象的点。我真的需要这些结构,因为例如我想创建一个新的“对象”,所以我将不得不再次使用“Objects”特殊变量。但是当我这样做时,FacesIndex和PointsIndex(那些只是计数器)将被重置。
唯一保持不变的var将是ObjectsIndex。这就是我需要结构的原因,因为在那些我可以保存创建的面和点的数量(在FaceCount和PointCount变量中)。
问题是什么?或者如果你知道一个更好的解决方案来满足我的需求,你能告诉我吗?
答案 0 :(得分:0)
你的问题真的在这里:
FacesIndex = FacesIndex + 1
增加索引而不对其引用的数组执行redim。然后,当您重新开始PointVertexes
数组时,您将获得空引用,因为Face
数组中的索引不存在。要解决这个问题,你应该这样做:
If PointsIndex = GL_NPPF - 1 Then
FacesIndex = FacesIndex + 1
ReDim Preserve Objects(ObjectsIndex).Face(FacesIndex)
PointsIndex = 0
... and then create the inner array, etc...