本文整理汇总了C++中XMLDoc::AsNode方法的典型用法代码示例。如果您正苦于以下问题:C++ XMLDoc::AsNode方法的具体用法?C++ XMLDoc::AsNode怎么用?C++ XMLDoc::AsNode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XMLDoc
的用法示例。
在下文中一共展示了XMLDoc::AsNode方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Sprite_Create
SpriteObj* Sprite_Create(const std::string& name, bool immediate)
{
immediate = immediate || !g_supportAsynchronousResourceLoading;
SpriteResource* resource = static_cast<SpriteResource*>(Resource_Find("sprite", name));
if (resource)
Resource_IncRefCount(resource);
// Create sprite from XML
else if (!strstr(name.c_str(), "."))
{
const std::string path = name + ".sprite.xml";
XMLDoc doc;
if (!doc.Load(path))
{
Log::Error("Failed to load sprite resource from " + path);
return NULL;
}
XMLNode* spriteNode = doc.AsNode()->GetFirstNode("sprite");
if (!spriteNode)
{
Log::Error("Failed to load sprite resource from " + path + ", reason: root node 'sprite' not found.");
return NULL;
}
MaterialObj* material = NULL;
if (const char* materialName = XMLNode_GetAttributeValue(spriteNode, "material"))
{
material = Material_Create(materialName);
if (!material)
{
Log::Error("Failed to load sprite resource from " + path + ", reason: can't load material " + materialName);
return NULL;
}
}
resource = new SpriteResource();
resource->state = ResourceState_CreationInProgress;
resource->name = name;
Material_SetHandle(material, resource->material);
Resource_IncRefCount(resource);
// Load animations
std::string defaultAnimationName;
for (XMLNode* animNode = XMLNode_GetFirstNode(spriteNode, "animation"); animNode; animNode = XMLNode_GetNext(animNode, "animation"))
{
const std::string name = XMLNode_GetAttributeValue(animNode, "name");
SpriteResource::Animation& anim = map_add(resource->animations, name);
anim.name = name;
// Get frame time
XMLNode_GetAttributeValueFloat(animNode, "frameTime", anim.frameTime, 0.1f);
// Check blend mode
//XMLNode_GetAttributeValueBool(animNode, "blending", anim->blendFrames);
// Check if default
bool isDefault;
if (defaultAnimationName.empty() || (XMLNode_GetAttributeValueBool(animNode, "isDefault", isDefault) && isDefault))
defaultAnimationName = anim.name;
// Load all frames and events
float time = 0.0f;
for (XMLNode* elemNode = XMLNode_GetFirstNode(animNode); elemNode; elemNode = XMLNode_GetNext(elemNode))
{
const char* elemName = XMLNode_GetName(elemNode);
if (!strcmp(elemName, "frame"))
{
SpriteResource::Frame& frame = vector_add(anim.frames);
const char* textureName = XMLNode_GetAttributeValue(elemNode, "texture");
frame.texture.Create(textureName, immediate);
if (!frame.texture.IsValid())
{
Log::Error("Failed to load sprite resource from " + path + ", reason: failed to load texture " + textureName);
delete resource;
return NULL;
}
time += anim.frameTime;
}
else if (!strcmp(elemName, "event"))
{
SpriteResource::Event& ev = vector_add(anim.events);
ev.time = time;
ev.name = XMLNode_GetAttributeValue(elemNode, "name");
}
}
anim.totalTime = (float) anim.frames.size() * anim.frameTime;
//.........这里部分代码省略.........