XMLの例を使用してCocos2d-xで説明する

XMLは拡張可能なマークアップ言語です。ゲーム開発では、最高スコア、ゲームレベル、その他の情報などのゲーム情報を保存したり、リソースを説明したりするためによく使用されます。XMLを初めて使用したのは、「CCAnimationによるアニメーションの作成」でした。 plistファイルを使用してアニメーションをロードする場合、XMLファイルが使用されます。plistファイルは実際にはXMLファイルです。タイルマップはCocos2d-x(1)で使用され、タイルマップはCocos2d-x(2)で使用されます。エディターで作成したタイルマップを保存すると、TMX形式のファイルが作成されます。TMXファイルもXMLファイルです。

XMLファイルは、中国語の文字化けしたコードの問題も解決できます。中国語の文字化けしたコードは、通常Windowsで使用されるさまざまなエンコード方式のため、Cocos2d-Xに表示されます。

VCはIDEとして使用され、VCはGTKエンコーディングを使用し、中国語はUTF-8エンコーディングを使用します。エンコーディング方式が異なるため、Cocos2d-Xで中国語を直接使用すると文字化けが発生し、xmlはUTF-8エンコーディングを使用します。したがって、XMLを使用すると、Cocos2d-Xで中国語の表示を実現できます。

理論的なことは話さないので、言いすぎるとわかりませんので、Cocos2d-XでのXMLの活用例をいくつかご紹介します。

プログラム例1:CCUserDefaultを使用してXMLの情報を読み取る

実装プロセス:

1. XMLファイルを作成する

2. XMLファイルに最高のスコアを書き込みます

3. XMLファイルの最高スコアを読み取ります

XMLファイルの作成コード:

//ゲームの最高スコアをメモリに保存します

CCUserDefault :: sharedUserDefault()-> setIntegerForKey(“ HighScore”、7000);

//ゲームの最高スコア情報をハードディスクに書き込みます

CCUserDefault :: sharedUserDefault()-> flush();

コンパイルが成功すると、UserDefault.xmlという名前のxmlファイルがデバッグディレクトリに生成されます。

UserDefault.xmlのコード:UserDefault.xmlに最高のスコアがあります。

-

7000

UserDefault.xmlで最高スコアを読み取る

//ゲームの最高スコアを読み取り、読み取られていない場合は0を返します

int highScore = CCUserDefault :: sharedUserDefault()-> getIntegerForKey(“ HighScore”、0);

//最高のスコアを出力します

CCLog( "highScore =%d"、highScore);

結果:

 

                          プログラム例2:plist形式のXMLファイルを使用してユーザー情報を保存し、ユーザー情報を読み取る1

実装プロセス:

plistとしてフォーマットされた新しいxmlファイルを作成します。ファイルの内容は次のとおりです

名前

張三峰

年齢

36

プログラムにコードを追加する

// plist形式でxmlファイルを読み取るための辞書クラスを作成します

CCDictionary * dict = CCDictionary :: createWithContentsOfFile(“ aaa.plist”);

//aaa.plistから名前情報を読み取ります

const CCString * name = dict-> valueForKey(“ name”);

//aaa.plistから年齢情報を読み取ります

const CCString * age = dict-> valueForKey(“ age”);

//これら2つの情報を出力します

CCLog(「名前は%s、年齢は%d」、name-> getCString()、age-> intValue());

結果:

22

プログラム例3:plist形式のxmlファイルを使用してユーザー情報を保存し、ユーザー情報を読み取る2

実装プロセス:

plistとしてフォーマットされた新しいxmlファイルを作成します。ファイルの内容は次のとおりです

名前

張三峰

年齢

36

家族

息子

名前

xxx

年齢

6

名前

yyy

年齢

次のコードをプログラムに追加します。

// plist形式でxmlファイルを読み取るための辞書クラスを作成します

CCDictionary * dict = CCDictionary :: createWithContentsOfFile(“ aaa.plist”);

//aaa.plistから名前情報を読み取ります

const CCString * name = dict-> valueForKey(“ name”);

//aaa.plistから年齢情報を読み取ります

const CCString * age = dict-> valueForKey(“ age”);

//これら2つの情報を出力します

CCLog(「名前は%s、年齢は%d」、name-> getCString()、age-> intValue());

//aaa.plistからファミリー情報を読み取ります

CCObject * oFamily = dict-> objectForKey( "family");

CCDictionary * dictFamily =(CCDictionary *)oFamily;

//息子の情報を辞書で探す

CCDictionary * dictSon =(CCDictionary *)dictFamily-> objectForKey( "son");

//息子の名前を取得

name = dictSon-> valueForKey(“ name”);

//息子の年齢を取得

年齢= dictSon-> valueForKey( "年齢");

//息子の情報を出力する

CCLog(「息子の名前は%s、息子の年齢は%d」、name-> getCString()、age-> intValue());

//娘の情報を辞書で探す

CCDictionary * dictdaughter =(CCDictionary *)dictFamily-> objectForKey(“ daughter”);

//娘の名前を見つける

name = dictdaughter-> valueForKey(“ name”);

//娘の年齢を探します

年齢= dictdaughter-> valueForKey(“ age”);

//娘の情報を印刷する

CCLog(「娘の名前は%s、娘の年齢は%d」、name-> getCString()、age-> intValue());

結果:

                     

プログラム例4:XMLファイルパーサーを作成する

実装コード:

#include“ T40XML_tinyXML.h”

CCScene * T40XML_tinyXML :: scene()

{

CCScene * s = CCScene :: create();

T40XML_tinyXML *レイヤー= T40XML_tinyXML :: create();

s-> addChild(layer);

戻り値;

}

void T40XML_tinyXML :: WalkOver(tinyxml2 :: XMLElement *ノード)

{

//ルートノードの下の最初の子ノードを取得します

tinyxml2 :: XMLElement * curNode = node-> FirstChildElement();

// xml内のノードをトラバースします

while(curNode)

{

if(curNode-> FirstChild())

{

CCLog(「ノードは%s、値は%s」、curNode-> Value()、curNode-> FirstChild()-> Value());

}

そうしないと

{

CCLog(「ノードは%s、値はNULL」、curNode-> Value());

}

WalkOver(curNode);

curNode = curNode-> NextSiblingElement();

}

}

bool T40XML_tinyXML :: init()

{

CCLayer :: init();

// xmlドキュメントを作成します

tinyxml2 :: XMLDocument * doc = new tinyxml2 :: XMLDocument;

// XMLドキュメントを読み込む

doc-> LoadFile(“ aaa.plist”);

//ドキュメントのすべてのコンテンツを印刷します

tinyxml2 :: XMLElement * rootElement = doc-> RootElement();

//aaa.plistのルートノードのコンテンツを印刷します

CCLog( "rootElemenet value is%s"、rootElement-> Value());

//aaa.plist内のすべてのノードの情報を出力します

WalkOver(rootElement);

ドキュメントを削除;

trueを返します。

}

            

おすすめ

転載: blog.csdn.net/qq_21743659/article/details/108616198