Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

03.04.2009, 15:43

[C++]Zahl mit Irrlicht XML-Reader einlesen [gelöst]

So, da bin ich mal wieder :p
Zwar keine Frage über fsanf, aber hat immerhin was mit Dateien zu tun.
(Ich hoffe, ich bin hier im richtig Forum)
Mittlerweile bin ich beim Leveledtor, und der soll die Position der Objekte ja auch irgendwie speichern. Ich abeite mit Irrlicht, also war es naheliegend irrlicht XML-Writer (Reader) zu benutzen. Klappt auch ganz gut, bis zu dem Punkt, wo ich die Position (Skalierung, Rotation...) der Objekte einlesen will. Ich krieg es einfach nicht hin Zahlen einzulesen.

Hier mal mein Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void CMap::LoadFromFile(char *filename)
{
    /******************************************/
    /* Dateistruktur:
    - Nodeweise
    - Terrainnode:
        - Heightmap
        - Textur
        - Detailmap
    - Objektnode:
        - Anzahlobjekte
        (für jedes Object:)
        - Typ
        - Modelname
        - Materialname
        - Position
        - Rotation
        - Skalierung
    - Dateiende */
    /******************************************/
    iNumObjects = 0;
    io::IXMLReader* xml = g_pMGame->device->getFileSystem()->createXMLReader(filename);

        while(xml && xml->read())
        {
              
                              
            if (core::stringw("Terrain") == xml->getNodeName())
            {

                 heightmap = xml->getAttributeValue(L"hm"); // Heightmap

                 textur    = xml->getAttributeValue(L"tx"); // Textur

                 detailmap = xml->getAttributeValue(L"dm"); // Detailmap

            }  
            else if (core::stringw("StaticObject") == xml->getNodeName())
            {
                    objects[iNumObjects] = new CStaticWorldObject();
                
                    objects[iNumObjects]->model      = xml->getAttributeValue(L"model");
                    objects[iNumObjects]->mate       = xml->getAttributeValue(L"material");
                    objects[iNumObjects]->position.X   = xml->getNodeData();
                    objects[iNumObjects]->position.Y   = xml->getAttributeValue(L"positionY");
    // [....] restliche Positions, Rotations und Skalierungsdaten einlesen

                    iNumObjects++;
                  
            }
                  
              
        }

        if (xml)
                xml->drop(); 

    

        
}


So, dabei gibt es aber Konvertieerungsprobleme. Die Positionen sind irr::f32, die Daten aus der xml aber const wchar_t*
Ich habs schon mit einem Umweg über char* versucht, das funktioniert auch, wenn man für die Positionen int nimmt. Das will Irrlicht dann aber nicht. (Ich benutze irr::vector3df, und das benutzt halt f32)
Hoffentlich kann mir jemand helfen,
schonmal danke im voraus

mfg DoubleM

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

03.04.2009, 15:44

Quellcode

1
2
3
# getAttributeValueAsFloat() : irr::io::IIrrXMLReader< char_type, super_class >
# getAttributeValueAsInt() : irr::io::IIrrXMLReader< char_type, super_class >
# getAttributeValueSafe() : irr::io::IIrrXMLReader< char_type, super_class >
Siehe: http://www.ambiera.com/irrxml/docu/functions.html

3

03.04.2009, 15:46

Oh, danke!
Da hab ich aber was übersehen :oops: Das nächste Mal gucke ich vorher genauer...

Werbeanzeige