MyGUI自适应大小用RTT方法已经解决,回归基础吧,继续MyGUI的学习之路。
resources.xml MyGUI在默认在这里面读取资源的存储路径,貌似是不能更改为其他名字,但是可以在程序中指定额外的资源存储路径
BaseManager 中 void addResourceLocation(const std::string& _name, bool _recursive = false);
name:路径想设什么就设什么,当前目录?("./"就可以了),_resursive意思是是不是也把当前目录的子目录也加入。
MyGUI_Core.xml 可以看成是存储资源文件名的(字体配置文件、皮肤配置文件、鼠标样式配置文件、层文件、字体和鼠标默认设置文件等等),当然了自己的资源文件也可以加到这里面,用。这个MyGUI_Core.xml 名字是可以更改的,用BaseManager中的setResourceFilename(const std::string& _flename);
分析一下MyGUI_Core.xml中的内容
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="List">
<List file="MyGUI_GeneratedFonts.xml"/>
<List file="MyGUI_Fonts.xml"/>
<List file="MyGUI_CommonSkins.xml"/>
<List file="MyGUI_BlueWhiteTheme.xml"/>
<List file="MyGUI_PointerImages.xml"/>
<List file="MyGUI_Pointers.xml"/>
<List file="MyGUI_Layers.xml"/>
<List file="MyGUI_Settings.xml"/>
<List file="TMCGUI_Core.xml"/>
</MyGUI>
挑简单的来,蚂蚁吃大象,一点一点来
先来看看与鼠标相关的三个文件MyGUI_PointerImages.xml、MyGUI_Pointers.xml、MyGUI_Settings.xml
MyGUI_PointerImages.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSet" name="ArrowPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer" rate="0.15">
<Frame point="13 11" count="30"/>
<Frame point="13 52"/>
<Frame point="56 52"/>
<Frame point="91 52"/>
<Frame point="56 52"/>
<Frame point="13 52"/>
</Index>
</Group>
</Resource>
</MyGUI>
这里面是定义了一些type="ResourceImageSet"的资源,从字面意思就可以看出,是图片集,也就是弄成图片动画了,想想转圈的鼠标,应该就是这么弄的。texture="MyGUI_Pointers.png"指定了这些图片集所在的图片,size为在图片中大小(长宽像素),index指定了图片集的播放顺序,rate是0.15秒指定图片的切换速度,0.15秒后切换到下一个。第一个是在"MyGUI_Pointers.png"中的13 11(左上角)位置截取size大小的小图片,循环30次,第二个是在13 52位置,以此类推。所以大概是30*0.15+5*0.15=5.25秒顺序播放完一遍图片集,可以有多个 Index,可以通过ImageBox的void setItemName(const std::string& _value)方法选择不同的Index播放。
MyGUI_Pointers.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSetPointer" name="arrow">
<Property key="Point" value="1 1"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="ArrowPointerImage"/>
</Resource>
</MyGUI>
定义了一些type="ResourceImageSetPointer"的资源,从字面意思看叫图片集指针,实际上指定了图片集的播放区域,Point指定了左上角位置1 1(应该是相对于鼠标当前位置,也就是在鼠标位置往下和往右各1个像素),Size指定了播放区域的大小长宽分别为32像素,Resource指定了播放哪个图片集,就是上面的ResourceImageSet资源。PointerManager类中有两个重要的成员变量 ImageBox* mMousePointer;
IPointer* mPointer; mPointer就是这儿的图片集指针,mMousePointer是一个ImageBox就是播放这个图片集指针的实体对象。
MyGUI_Settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI>
<MyGUI type="Font">
<Property key="Default" value="font_Simhei"/>
<Property key="DefaultGenerated" value="DejaVuSansFontGenerated_15"/>
</MyGUI>
<MyGUI type="Pointer">
<Property key="Default" value="arrow"/>
<Property key="Layer" value="Pointer"/>
</MyGUI>
</MyGUI>
设定了默认的字体是font_Simhei,默认的手写字体是DejaVuSansFontGenerated_15,默认的鼠标资源为arrow,就是前面的ResourceImageSetPointer,鼠标所在的层为Pointer。这个层名称可以在MyGUI_Layers.xml中看到。
再来看MyGUI_Layers.xml
可以看到这里面主要有两种层类型SharedLayer和OverlappedLayer,查资料说所有为SharedLayer的层一次渲染,而为OverlappedLayer的层每层进行一次渲染,而且按照在这里面的先后顺序就行渲染,比如这里面的墙纸层Wallpaper,因为后续的物体必然会遮挡住一些墙纸,所以先渲染符合正常思维。
以后继续分析。。
resources.xml MyGUI在默认在这里面读取资源的存储路径,貌似是不能更改为其他名字,但是可以在程序中指定额外的资源存储路径
BaseManager 中 void addResourceLocation(const std::string& _name, bool _recursive = false);
name:路径想设什么就设什么,当前目录?("./"就可以了),_resursive意思是是不是也把当前目录的子目录也加入。
MyGUI_Core.xml 可以看成是存储资源文件名的(字体配置文件、皮肤配置文件、鼠标样式配置文件、层文件、字体和鼠标默认设置文件等等),当然了自己的资源文件也可以加到这里面,用。这个MyGUI_Core.xml 名字是可以更改的,用BaseManager中的setResourceFilename(const std::string& _flename);
分析一下MyGUI_Core.xml中的内容
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="List">
<List file="MyGUI_GeneratedFonts.xml"/>
<List file="MyGUI_Fonts.xml"/>
<List file="MyGUI_CommonSkins.xml"/>
<List file="MyGUI_BlueWhiteTheme.xml"/>
<List file="MyGUI_PointerImages.xml"/>
<List file="MyGUI_Pointers.xml"/>
<List file="MyGUI_Layers.xml"/>
<List file="MyGUI_Settings.xml"/>
<List file="TMCGUI_Core.xml"/>
</MyGUI>
挑简单的来,蚂蚁吃大象,一点一点来
先来看看与鼠标相关的三个文件MyGUI_PointerImages.xml、MyGUI_Pointers.xml、MyGUI_Settings.xml
MyGUI_PointerImages.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSet" name="ArrowPointerImage">
<Group name="Pointer" texture="MyGUI_Pointers.png" size="32 32">
<Index name="Pointer" rate="0.15">
<Frame point="13 11" count="30"/>
<Frame point="13 52"/>
<Frame point="56 52"/>
<Frame point="91 52"/>
<Frame point="56 52"/>
<Frame point="13 52"/>
</Index>
</Group>
</Resource>
</MyGUI>
这里面是定义了一些type="ResourceImageSet"的资源,从字面意思就可以看出,是图片集,也就是弄成图片动画了,想想转圈的鼠标,应该就是这么弄的。texture="MyGUI_Pointers.png"指定了这些图片集所在的图片,size为在图片中大小(长宽像素),index指定了图片集的播放顺序,rate是0.15秒指定图片的切换速度,0.15秒后切换到下一个。第一个是在"MyGUI_Pointers.png"中的13 11(左上角)位置截取size大小的小图片,循环30次,第二个是在13 52位置,以此类推。所以大概是30*0.15+5*0.15=5.25秒顺序播放完一遍图片集,可以有多个 Index,可以通过ImageBox的void setItemName(const std::string& _value)方法选择不同的Index播放。
MyGUI_Pointers.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Resource" version="1.1">
<Resource type="ResourceImageSetPointer" name="arrow">
<Property key="Point" value="1 1"/>
<Property key="Size" value="32 32"/>
<Property key="Resource" value="ArrowPointerImage"/>
</Resource>
</MyGUI>
定义了一些type="ResourceImageSetPointer"的资源,从字面意思看叫图片集指针,实际上指定了图片集的播放区域,Point指定了左上角位置1 1(应该是相对于鼠标当前位置,也就是在鼠标位置往下和往右各1个像素),Size指定了播放区域的大小长宽分别为32像素,Resource指定了播放哪个图片集,就是上面的ResourceImageSet资源。PointerManager类中有两个重要的成员变量 ImageBox* mMousePointer;
IPointer* mPointer; mPointer就是这儿的图片集指针,mMousePointer是一个ImageBox就是播放这个图片集指针的实体对象。
MyGUI_Settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI>
<MyGUI type="Font">
<Property key="Default" value="font_Simhei"/>
<Property key="DefaultGenerated" value="DejaVuSansFontGenerated_15"/>
</MyGUI>
<MyGUI type="Pointer">
<Property key="Default" value="arrow"/>
<Property key="Layer" value="Pointer"/>
</MyGUI>
</MyGUI>
设定了默认的字体是font_Simhei,默认的手写字体是DejaVuSansFontGenerated_15,默认的鼠标资源为arrow,就是前面的ResourceImageSetPointer,鼠标所在的层为Pointer。这个层名称可以在MyGUI_Layers.xml中看到。
再来看MyGUI_Layers.xml
可以看到这里面主要有两种层类型SharedLayer和OverlappedLayer,查资料说所有为SharedLayer的层一次渲染,而为OverlappedLayer的层每层进行一次渲染,而且按照在这里面的先后顺序就行渲染,比如这里面的墙纸层Wallpaper,因为后续的物体必然会遮挡住一些墙纸,所以先渲染符合正常思维。
以后继续分析。。