iphone ios cocos2d-iphone plist cocos2d-x

iphone - cocos2d-x cómo leer plist en una matriz



ios cocos2d-iphone (4)

Quiero leer un plist usando cocos2d-x (c ++) aquí está mi plist:

<array> <dict> <key>x</key> <integer>0</integer> <key>y</key> <integer>0</integer> </dict> <dict> <key>x</key> <integer>140</integer> <key>y</key> <integer>12</integer> </dict> <dict> <key>x</key> <integer>120</integer> <key>y</key> <integer>280</integer> </dict> <dict> <key>x</key> <integer>40</integer> <key>y</key> <integer>364</integer> </dict> <array>

es básicamente una matriz de diccionario que consta de coordenadas (x, y). mi código original para leer es:

NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"w%i", world] ofType:@"plist"]; NSMutableArray* points = [NSMutableArray arrayWithContentsOfFile:path];

pero ahora necesito traducirlo a cocos2d-x en c ++. He buscado en Google un artículo, pero se trata de leer plist en el diccionario. necesito una matriz

EDITAR:::

Ahora he cambiado mi formato plist:

<dict> <key>11x</key> <integer>0</integer> <key>11y</key> <integer>0</integer> <key>12x</key> <integer>140</integer> <key>12y</key> <integer>12</integer> <dict>

¿¿¿que debería hacer??? Todavía obtengo el mismo error:

CCDictionary<std::string, CCObject*>* dict = CCFileUtils::dictionaryWithContentsOfFile(plistPath); int x = (int)dict->objectForKey("11x"); int y = (int)dict->objectForKey("11y");

no funcionará Por favor pruébalo primero. ver si puede leer un int del plist de muestra


Pruebe la siguiente línea de código

//const char *pszPath = CCFileUtils::fullPathFromRelativePath(plistName); //consider that file is in resource bundle.. // CCDictionary<std::string, CCObject*> *plistDictionary=CCFileUtils::dictionaryWithContentsOfFile("testplist.plist"); // CCArray *testitems = (CCArray*)plistDictionary->objectForKey("root");

EDITAR

o puedes probar esto también ...

CCDictionary<std::string, CCObject*> *plistDictionary = CCFileUtils::dictionaryWithContentsOfFile("testplist.plist"); CCMutableArray<CCObject*> *testitems = (CCMutableArray<CCObject*>*)plistDictionary->objectForKey("root"); CCLog("COUNT: %d", testitems->count());

EDIT-2

Pruebe el código siguiente en caso de que la raíz sea un diccionario

var1 = atoi(valueForKey("blendFuncSource", dictionary)); var2 = atoi(valueForKey("blendFuncDestination", dictionary));

Observe la clase CCParticleSystem.cpp la que puede obtener una idea de CCParticleSystem.cpp . check bool CCParticleSystem::initWithDictionary(CCDictionary<std::string, CCObject*> *dictionary) dentro de la clase CCParticleSystem.cpp

Saludos, Nikhil


cuando lee en un dict y usa ObjectForKey("BLA") , puede encasillarlo en un CCString* como este:

CCString* tmpStr = (CCString*)(yourDict->ObjectForKey("KEY")); int x = tmpStr->toInt();


también puedes usar

Array* items = Array::createWithContentsOfFile("name.plist");


Vea aquí el enlace para leer un diccionario del archivo .
Para leer array no pude encontrar nada, así que lo que puedes hacer es cambiar tu plist

<dict> <key>root</key> <array> <dict> <key>x</key> <integer>0</integer> <key>y</key> <integer>0</integer> </dict> <dict> <key>x</key> <integer>140</integer> <key>y</key> <integer>12</integer> </dict> <dict> <key>x</key> <integer>120</integer> <key>y</key> <integer>280</integer> </dict> <dict> <key>x</key> <integer>40</integer> <key>y</key> <integer>364</integer> </dict> <array> </dict>

Entonces

CCDictionary<std::string, CCObject*> *dict = CCFileUtils::dictionaryWithContentsOfFile("yourFile.plist"); CCArray *testitems = (CCArray*)dict->objectForKey("root");

Gracias a OMGPOP .