iphone - license - cocos2d-x plistを配列に読み込む方法



cocos2d x c++ (3)

dictを読み込んでObjectForKey("BLA")を使うと、 CCString*ようにCCString*型キャストすることができます:

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

私はcocos2d-x(c ++)を使ってplistを読んでみたいです。私の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>

基本的に(x、y)座標で構成される辞書の配列です。 読書のための私の元のコードは:

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

しかし、今私はそれをcocos2d-xにC ++で翻訳する必要があります。 私はいくつかの記事をgoogledているが、彼らはすべて辞書にplistを読むことです。 私は配列が必要です。

編集:::

今私は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>

私は何をすべきか??? 私はまだ同じエラーが発生します:

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

動作しません。 まず試してみてください。 あなたがサンプルのplistからintを読むことができるかどうかを見てください


次のコード行を試してみてください

//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");

EDIT

またはあなたもこれを試すことができます...

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

EDIT-2

ルートの場合は次のコードを試してみてください

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

Inside CCParticleSystem.cppクラスを見れば、バッターのアイデアを得ることができます。 CCParticleSystem.cppクラス内のbool CCParticleSystem::initWithDictionary(CCDictionary<std::string, CCObject*> *dictionary)CCParticleSystem.cpp

よろしくね、Nikhil


ここからファイルから辞書を読むためリンクを見てください。
配列を読み取るには何も見つかりませんでしたので、できることはあなたの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>

その後、

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

OMGPOPに感謝します 。