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
年齢
3
次のコードをプログラムに追加します。
// 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を返します。
}