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 .