More TYPE nonsense
Blitz3D Forums/Blitz3D Beginners Area/More TYPE nonsense
I've been through the tutorials for using TYPEs, I just wanted to check something.
Say I create a type:
TYPE thing
field x
field y
End Type
And then I want to create a number of them, I can loop:
For i = 1 to 5
group.thing = New thing
Next
And if I want to access them, I have to loop through them:
For group.thing = each thing
group\x = group\x + 1
Next
What I don't seem to be able to do is create an array of "thing" and access each one directly. In C I would just:
struct MYTHING
{
float x;
float y;
} thing[100];
And access each one directly. . .
thing[36].x = 4.0; etc
Is this not possible with types in BlitzPlus?
Dim group.thing( 100 )
group( 0 )\x = 10
group( 2 )\y = 15
Thanks. . . I was sure I'd tried that and failed. Need more caffine :)
I think this works as well:
type blah
field a
end type
type blah2
field b.blah[10]
end type
Btw, square parentheses are neccessary for arrays in types, and said arrays can only be one dimensional, but that doesn't stop you from indexing them like so: y*10 + x
On second thoughts, this isn't working:
Type thing
Field x
End Type
Dim group.thing(100)
group(1)\x = 4
This just gives me an error. . .
"Object does not exist"
(Debugger pointing to the group(1)\x = 4 line)
Do they have to be initialised in some way maybe?
sswift's method is working, that'll do for me :) Thanks guys
You need to create it with new first:
Type thing
Field x
End Type
Dim group.thing(100)
group.thing(1)=New thing
group(1)\x = 4
Bye..
As Tiger pointed to...
Dim group.thing(100) just creates an array that CAN store the pointers to 100 things. The memory for each thing still needs to be allocated with New.
Yeah, sorry forgot that bit - just assumed you'd know.
"sswift's method is working, that'll do for me :) Thanks guys"
Without using NEW? That migth be a bug... The array is just supposed to be pointers to types, not create new types itself.
No, I did use New. I am new at this, I've done nothing but code C for the past year so it's hard to shake off bad habbits. To be honest so much code has passed I can hardly remember what I tried for the other method now. In any case, all's fine.
Type thing
Field x
End Type
Dim group.thing(100)
; Create the instances and fill the array with the pointers to those instances
For i = 0 to 100
group(i) = New thing
Next
group(1)\x = 4