MyGUI 学习(2)

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,因为后续的物体必然会遮挡住一些墙纸,所以先渲染符合正常思维。
 
以后继续分析。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值