<p> テスト文書<br /> <input type="text" name="name" value="" /><br /> <a href="hogehoge.html">ほげ</a><br /> <img src="hoge.png" /> </p>
<data> <item id="1">テスト1</item> <item id="2">テスト2</item> <item id="3">テスト3</item> <item id="4">テスト4</item> </data>
<data> <item id="1" /> </data>
<data> <item id="1"></item> </data>
<?xml version="1.0" encoding="utf-8" ?> <data> <item id="1">テスト1</item> <item id="2">テスト2</item> <item id="3">テスト3</item> <item id="4">テスト4</item> </data>
<?xml version="1.0" encoding="Shift-JIS" ?> <data> <item id="1">テスト1</item> <item id="2">テスト2</item> <item id="3">テスト3</item> <item id="4">テスト4</item> </data>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" ?> <GameStage> <GameObjects> <TilingFixedBox> <Scale>40,1,1</Scale> <Rot>0,0,0</Rot> <Pos>0,0.5,19.5</Pos> </TilingFixedBox> <TilingFixedBox> <Scale>40,1,1</Scale> <Rot>0,0,0</Rot> <Pos>0,0.5,-19.5</Pos> </TilingFixedBox> <TilingFixedBox> <Scale>40,1,1</Scale> <Rot>0,XM_PIDIV2,0</Rot> <Pos>19.5,0.5,0</Pos> </TilingFixedBox> <TilingFixedBox> <Scale>40,1,1</Scale> <Rot>0,XM_PIDIV2,0</Rot> <Pos>-19.5,0.5,0</Pos> </TilingFixedBox> <TilingPlate> <Scale>40,40,1</Scale> <Rot>XM_PIDIV2,0,0</Rot> <Pos>0,0,0</Pos> </TilingPlate> </GameObjects> <CellMap>0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,A,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0</CellMap> </GameStage>
class GameStage : public Stage { //XMLリーダー unique_ptr<XmlDocReader> m_XmlDocReader; //以下略 };
void GameStage::OnCreate() {
try {
wstring DataDir;
App::GetApp()->GetDataDirectory(DataDir);
//XMLの読み込み
m_XmlDocReader.reset(new XmlDocReader(DataDir + L"GameStage.xml"));
//中略
}
catch (...) {
throw;
}
}
//敵の作成
void GameStage::CreateEnemy() {
//オブジェクトのグループを作成する
auto Group = CreateSharedObjectGroup(L"EnemyGroup");
//セルマップのノードを取得
auto CellmapNode = m_XmlDocReader->GetSelectSingleNode(L"GameStage/CellMap");
if (!CellmapNode) {
throw BaseException(
L"GameStage/CellMapが見つかりません",
L"if (!CellmapNode)",
L"GameStage::CreateEnemy()"
);
}
//内容の文字列を取得
wstring MapStr = XmlDocReader::GetText(CellmapNode);
vector<wstring> LineVec;
//最初に「改行」をデリミタとした文字列の配列にする
Util::WStrToTokenVector(LineVec, MapStr, L'\n');
for (size_t i = 0; i < LineVec.size();i++) {
//トークン(カラム)の配列
vector<wstring> Tokens;
//トークン(カラム)単位で文字列を抽出(L','をデリミタとして区分け)
Util::WStrToTokenVector(Tokens, LineVec[i], L',');
for (size_t j = 0; j < Tokens.size(); j++) {
//XとZの位置を計算
float XPos = (float)((int)j - 19);
float ZPos = (float)(19 - (int)i);
if (Tokens[j] == L"1") {
AddGameObject<Enemy1>(Vec3(XPos,0.25f,ZPos));
}
else if (Tokens[j] == L"2") {
AddGameObject<Enemy2>(Vec3(XPos, 0.25f, ZPos));
}
else if (Tokens[j] == L"3") {
AddGameObject<Enemy3>(Vec3(XPos, 0.25f, ZPos));
}
}
}
}
//セルマップのノードを取得
auto CellmapNode = m_XmlDocReader->GetSelectSingleNode(L"GameStage/CellMap");
//内容の文字列を取得 wstring MapStr = XmlDocReader::GetText(CellmapNode);
vector<wstring> LineVec; //最初に改行をデリミタとした文字列の配列にする Util::WStrToTokenVector(LineVec, MapStr, L'\n');
//ボックスの作成 void GameStage::CreateFixedBox() { auto BoxNodes = m_XmlDocReader->GetSelectNodes(L"GameStage/GameObjects/TilingFixedBox"); if (!BoxNodes) { throw BaseException( L"GameStage/GameObjects/TilingFixedBoxが見つかりません", L"if (!BoxNodes)", L"GameStage::CreateFixedBox()" ); } long CountNode = XmlDocReader::GetLength(BoxNodes); for (long i = 0; i < CountNode; i++) { auto Node = XmlDocReader::GetItem(BoxNodes, i); auto ScaleNode = XmlDocReader::GetSelectSingleNode(Node, L"Scale"); auto RotNode = XmlDocReader::GetSelectSingleNode(Node, L"Rot"); auto PosNode = XmlDocReader::GetSelectSingleNode(Node,L"Pos"); wstring ScaleStr = XmlDocReader::GetText(ScaleNode); wstring RotStr = XmlDocReader::GetText(RotNode); wstring PosStr = XmlDocReader::GetText(PosNode); //トークン(カラム)の配列 vector<wstring> Tokens; //トークン(カラム)単位で文字列を抽出(L','をデリミタとして区分け) Util::WStrToTokenVector(Tokens, ScaleStr, L','); //各トークン(カラム)をスケール、回転、位置に読み込む Vec3 Scale( (float)_wtof(Tokens[0].c_str()), (float)_wtof(Tokens[1].c_str()), (float)_wtof(Tokens[2].c_str()) ); Tokens.clear(); Util::WStrToTokenVector(Tokens, RotStr, L','); Vec3 Rot; //回転は「XM_PIDIV2」の文字列になっている場合がある Rot.x = (Tokens[0] == L"XM_PIDIV2") ? XM_PIDIV2 : (float)_wtof(Tokens[0].c_str()); Rot.y = (Tokens[1] == L"XM_PIDIV2") ? XM_PIDIV2 : (float)_wtof(Tokens[1].c_str()); Rot.z = (Tokens[2] == L"XM_PIDIV2") ? XM_PIDIV2 : (float)_wtof(Tokens[2].c_str()); Tokens.clear(); Util::WStrToTokenVector(Tokens, PosStr, L','); Vec3 Pos( (float)_wtof(Tokens[0].c_str()), (float)_wtof(Tokens[1].c_str()), (float)_wtof(Tokens[2].c_str()) ); //各値がそろったのでオブジェクト作成 AddGameObject<TilingFixedBox>(Scale, Rot, Pos, 1.0f, 1.0f); } }
auto BoxNodes = m_XmlDocReader->GetSelectNodes(L"GameStage/GameObjects/TilingFixedBox");
long CountNode = XmlDocReader::GetLength(BoxNodes); for (long i = 0; i < CountNode; i++) {
for (long i = 0; i < CountNode; i++) {
auto Node = XmlDocReader::GetItem(BoxNodes, i);
auto ScaleNode = XmlDocReader::GetSelectSingleNode(Node, L"Scale");
auto RotNode = XmlDocReader::GetSelectSingleNode(Node, L"Rot");
auto PosNode = XmlDocReader::GetSelectSingleNode(Node,L"Pos");
wstring ScaleStr = XmlDocReader::GetText(ScaleNode);
wstring RotStr = XmlDocReader::GetText(RotNode);
wstring PosStr = XmlDocReader::GetText(PosNode);
Tokens.clear();
Util::WStrToTokenVector(Tokens, PosStr, L',');