FindChild problem
Blitz3D Forums/Blitz3D Programming/FindChild problem
I've created a tree in Milkshape with two groups (child entities) called Trunk and Leaves, then exported as a .B3D.
So that I can fly, climb, etc through the leaves but bump into the trunk, I want to set the collisions separately:
[CODE]
parent = LoadAnimMesh("Tree1.b3d")
child = FindChild(parent,"Leaves")
If child <>0
EntityType child,0
EntityPickMode child,0
EndIf
child = FindChild(parent,"Trunk")
If child <>0
EntityType child,TYPE_OBJ, False
EntityPickMode child,2 ; polygon
EndIf
[/CODE]
But the 'child' variable always returns 0, so they are never set.
If I export as a .X file it works!
I want to use .B3D if only because the scaling is correct, and for future compatibility.
Anyone know what I am doing wrong?
purhaps the letters are lowercase or uppercase? (the names of the children)?
Nah, just checked. Case doesn't matter.
But just checked, and the .X file contains refs to both LEAVES and TRUNK.
The .B3D file contains none.
Is this then a problem with Milkshape?
But I thought plenty of other people were already manipulating Ms3D>B3D entities (hands etc) or so the forums would have you believe.
This should tell you all you need to know:
parent= LoadAnimMesh("Tree1.b3d")
ent = parent
While ent
Debuglog EntityName(ent)
ent = NextChild(ent)
Wend
;in the code archive
Function NextChild(ent)
If CountChildren(ent)>0
Return GetChild(ent,1)
EndIf
Local foundunused=False
Local foundent = 0, parent,sibling
While foundunused=False And ent<>0
parent = GetParent(ent)
If parent<>0
If CountChildren(parent)>1
If GetChild(parent,CountChildren(parent))<>ent
For siblingcnt = 1 To CountChildren(parent)
sibling = GetChild(parent,siblingcnt)
If sibling=ent
foundunused = True
foundent = GetChild(parent,siblingcnt+1)
EndIf
Next
EndIf
EndIf
EndIf
ent = parent
Wend
Return foundent
End Function
No, actually. With all due respect and thanks this doesn't help. If the literal child entity names 'TRUNK' and 'LEAVES' are not exported in a Milkshape>B3D then getting the handle of each child entity won't help.
I would merely have a list of child entity handles without knowing what I could do with them.
Any other ideas?
Sorry, I misunderstood the problem. Are the TRUNK and LEAVES two separate Surfaces in the B3D file? If so, you might have to remove one and rebuild it in its own Entity.
TRUNK and LEAVES are two separate child entities already, but it seems that Milkshape does NOT export the names in a B3D, but DOES export the names in an X file! (-with bad scaling).
I'll find a workaround somehow. Thanks for trying to help.
But this is getting very tedious.
So many people on the forums are wittering on about using GetChild/FindChild to manipulate hands,guns etc so what the hell modeller are they using which preserves the child entity names when exported?
And please don't say 3DS Max. Yecchh!
I use CharacterFX. Please notify the guys of Umbalum, the maker of Milkshape, or the maker of the B3D export plugin, they might correct this bug, it really seems to be a bug.
send me the tree model and i'll try messing in milkshape with it, i always use milkshape for my exports and never have any trouble so something wrongs going on.
Thanks sinu, it's on its way.
Cheers, john.
Sinu, your email address failed. Any other?
John,
A daft question but no one has asked it asaik - you have the very latest B3D exporter for Milkshape yes?
(Well I did say it was a daft question).
EDIT:
You may also find this useful:
B3D Tweak Utility
By Michael Reitzenstein
I think it is available from:
http://www.mking.com/demonstarsm2/index.htmlIPete2.