Child in einer Hierachie finden

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Moep

Betreff: Child in einer Hierachie finden

BeitragMo, Apr 02, 2007 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich brauche eine Funktion,die alle entitys eines animmeshs durchgeht und nach einem child sucht.Die funktion soll soll den ersten treffer zurückgeben.

Ich hab schon was angefangen aber das bringts nicht so wirklich , weil die funktion nur die ersten paar unterobjekte durchgeht.

Code: [AUSKLAPPEN]
Function SeekChild(entity,name$)
   For i = 1 To CountChildren(entity)
      child=GetChild(entity,i)
      If EntityName(child)=name
         Return child
      Else
         For i2 = 1 To CountChildren(child)
            child2=GetChild(child,i2)
            If EntityName(child2)=name
               Return child2
            Else
               For i3 = 1 To CountChildren(child2)
               child3=GetChild(child2,i3)
               If EntityName(child3)=name
                  Return child3
               EndIf
            Next
            EndIf
         Next
      EndIf
   Next
End Function


Naja bsl rumprobiert und es geht anscheinend Very Happy

Code: [AUSKLAPPEN]
Function SeekChild(entity,name$)
   For i = 1 To CountChildren(entity)
      child=GetChild(entity,i)
      If EntityName(child)=name
         Return child
      Else
         For i2 = 1 To CountChildren(child)
            child2=GetChild(child,i2)
            If EntityName(child2)=name
               Return child2
            Else
               For i3= 1 To CountChildren(child2)
                  child3=GetChild(child2,i3)
                  If EntityName(child3)=name Or SeekChild(child3,name)
                     Return child3
                  EndIf
               Next
            EndIf
         Next
      EndIf
   Next
End Function


mfg Moep

FreetimeCoder

BeitragMo, Apr 02, 2007 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst deine Funktion Rekursiv machen, also immer, wenn ein Child mehrere Childs hat die Funktion aufrufen.
"Wir haben keine Chance, aber wir werden sie nutzen!"
Projekte:
Dexterity Ball (100%)
Aquatic Atmosfear (22 % ca 4700 Zeilen) eingefrohren mangels OOP Fähigkeiten von Blitz
(ehemals Uboot)
PC: Intel D 3 GHz | NVidiaGforce 6700 256 Mb | 1024 Mb DDR RAM 400 Mhz | 2x160 GB S-ATA

Mr.Keks

BeitragMo, Apr 02, 2007 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ist ql:findchild denn nicht rekursiv?
MrKeks.net
 

Dreamora

BeitragMo, Apr 02, 2007 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit obiger Implementation net, nein.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

BIG BUG

BeitragMo, Apr 02, 2007 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, FindChild macht auch rekursive Sucharbeit für dich, hier brauchst Du keine eigene Funktion(solange es Dir nur um das erste Auftreten geht)

Ansonsten hier wie Du es selbst mit Rekursion(Selbstaufruf einer Funktion) lösen könntest(ungetestet):

Code: [AUSKLAPPEN]

Function SeekChild(entity,name$)
   For i = 1 To CountChildren(entity)
      child=GetChild(entity,i)
      If EntityName(child)=name
         Return child
      Else
         SeekChild(child, name$)
      endif
   next
end function

B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

Dreamora

BeitragMo, Apr 02, 2007 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
return seekChild(...) meinte er natürlich Wink
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragMo, Apr 02, 2007 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Function EntityFindByName(e,Name$)

 Local ex=0

 If e=0 Then Return 0

 If EntityName(e)=Name$ Then Return e

 Local c,i
 For i=1 To CountChildren(e)
  c=GetChild(e,i)
  ex=EntityFindByName(c,Name$)
  If ex Then Exit
 Next

 Return ex

End Function



Anderes Beispiel wo man die Farbe setzt
Code: [AUSKLAPPEN]

Function EntityColorRec(e,r,g,b)

 If e=0 Then Return

 If EntityClass(e)="Mesh" Then EntityColor e,r,g,b

 Local c,i
 For i=1 To CountChildren(e)
  c=GetChild(e,i)
  EntityColorRec c,r,g,b
 Next

End Function

Moep

BeitragDi, Apr 03, 2007 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke fuer die viele hilfe Very Happy
Jetzt weiß ich auch endlich was man mit sonen Rekursiven Funktionen machen kann ^^

mfg Moep

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group