Seite 2 von 3

Verfasst: 09.02.2008 20:19
von Scarabol
Super danke Kiffi!!!

Das anpassen bzw. erweitern schaff ich nur hatte ich bisher das Grundsystem nicht verstanden :)

@Stargate
....merkt doch keiner :)
und falls doch ist noch die Frage ob sie dich wirklich verklagen....

Gruß
Scarabol

Verfasst: 22.02.2008 18:51
von Scarabol
Hi Leute,

mal angenommen die Anzahl der Faces ist vorher nicht angegeben kann ich dann trotzdem alle Faces ermitteln, die zwischen <submesh> und </submesh> angegeben wurden?

Gruß
Scarabol

Verfasst: 22.02.2008 19:35
von Kiffi
Scarabol hat geschrieben:mal angenommen die Anzahl der Faces ist vorher nicht angegeben kann ich dann trotzdem alle Faces ermitteln, die zwischen <submesh> und </submesh> angegeben wurden?
ja, kannst Du:

Code: Alles auswählen

Structure s_Face
  v1.l
  v2.l
  v3.l
EndStructure

oXML = LoadXML(#PB_Any, "D:\Ogre.xml")

If oXML
  
  NewList Face.s_Face()
  
  FaceCounter = 0
  
  Repeat
    oNode = XMLNodeFromPath(RootXMLNode(oXML), "mesh/submeshes/submesh/faces/face[" + Str(FaceCounter) + "]")
    If oNode = 0 : Break : EndIf
    AddElement(Face())
    If ExamineXMLAttributes(oNode)
      While NextXMLAttribute(oNode)
        Select XMLAttributeName(oNode)
          Case "v1" : Face()\v1 = Val(XMLAttributeValue(oNode))
          Case "v2" : Face()\v2 = Val(XMLAttributeValue(oNode))
          Case "v3" : Face()\v3 = Val(XMLAttributeValue(oNode))
        EndSelect
      Wend
    EndIf
    FaceCounter + 1
  ForEver

  Debug "Anzahl Faces: " + Str(CountList(Face()))
  
  FreeXML(oXML)
  
EndIf
Falls Du Fragen zum Code hast -> Immer her damit :-)

Grüße ... Kiffi

Verfasst: 22.02.2008 20:43
von Scarabol
So jetzt kommt die Masterfrage :)

Wie mache ich das dann bei folgender Struktur:

<main>
<sub1 bla bla bla>
<sub2 ne ne ne>
</main>

Die Subs haben alle unterschiedliche Namen, die nicht nummeriert sind :)

Die Unterschiedlichen Parameter kann ich natürlich mit ExamineAttributes auslesen...

Gruß
Scarabol

Verfasst: 22.02.2008 20:46
von Kiffi
Scarabol hat geschrieben:Wie mache ich das dann bei folgender Struktur:
dann musst du die Childnodes von main durchlaufen: ChildXMLNode()

Grüße ... Kiffi

Verfasst: 25.02.2008 17:54
von Scarabol
hmm funzt nicht....

Code: Alles auswählen

  LoadXML(1, "data\map.txt")
  main = MainXMLNode(1)
  Debug XMLChildCount(main)
hier die "map"

Code: Alles auswählen

<map width="11" height="11" playerx="7" playery="8">
	<!-- Grasfläche erstellen -->
	<area startx="1" starty="1" stopx="10" stopy="10" boden="1" state="1"></area>
	<area startx="1" starty="7" stopx="4" stopy="10" boden="-70" state="0"></area>
	
	<!-- Haus einfügen -->
	<field x="7" y="4" house="60" state="0"></field>
	<field x="8" y="4" house="61" state="0"></field>
	<field x="9" y="4" house="62" state="0"></field>
	<field x="7" y="5" house="63" state="0"></field>
	<field x="8" y="5" house="64" state="0"></field>
	<field x="9" y="5" house="65" state="0"></field>
	<field x="7" y="6" house="66" state="0"></field>
	<field x="8" y="6" house="67" state="0"></field>
	<field x="9" y="6" house="68" state="0"></field>
	
	<area startx="6" starty="3" stopx="10" stopy="3" boden="59" state="0"></area>
	<area startx="6" starty="7" stopx="10" stopy="7" boden="59" state="0"></area>
	<area startx="6" starty="4" stopx="6" stopy="7" boden="59" state="0"></area>
	<area startx="10" starty="4" stopx="10" stopy="7" boden="59" state="0"></area>
	<field x="8" y="7" house="0" state="1"></field>
</map>
Wie fehlerresistent ist das XML System eigentlich?
Also kann ich auch knoten auslesen, die nie beendet werden? So könnt ich mir die ganzen End-Tags bei field und area sparen...

Gruß
Scarabol

Verfasst: 25.02.2008 18:33
von edel
Wenn nichts dazwischen steht kannst du es auch so schreiben :

Code: Alles auswählen

<field x="8" y="7" house="0" state="1"/>

Verfasst: 27.02.2008 20:32
von Scarabol
Danke Leute,

kann mir noch einer sagen, was ich da oben falsch gemacht hab?
Childcount gibt immer 0 :(

Gruß
Scarabol

Verfasst: 27.02.2008 21:55
von Kiffi
Scarabol hat geschrieben:kann mir noch einer sagen, was ich da oben falsch gemacht hab?
Childcount gibt immer 0 :(
mh, ich musste auch knobeln. Des Rätsels Lösung:
Du verwendest Umlaute in Deinen Kommentaren. ;-)

Code: Alles auswählen

<!-- Grasfläche erstellen -->
[...]
<!-- Haus einfügen -->
bitte ersetzen durch:

Code: Alles auswählen

<!-- Grasflaeche erstellen -->
[...]
<!-- Haus einfuegen -->
und hier der entsprechende Code, um dann die
Childnodes korrekt auszulesen:

Code: Alles auswählen

LoadXML(1, "d:\map.xml")
RootNode = RootXMLNode(1)
ChildNode = ChildXMLNode(RootNode)
Debug GetXMLNodeName(ChildNode) ; -> map
Debug XMLChildCount(ChildNode)  ; -> 18

Grüße ... Kiffi

Verfasst: 27.02.2008 22:58
von Scarabol
Super Danke!

Hätte man das vorher vielleicht mit den Error Befehlen aus der XML Lib herausfinden können?

Gruß
Scarabol