CEGUI 动画系统

1.准备动画图片资源

自己新建个imageset,把动画每帧的图片放进去,定义好相应的Image

<?xml version="1.0" encoding="UTF-8"?>

<Imageset Name="aniImagesets" Imagefile="animation.tga" NativeHorzRes="1024" NativeVertRes="768" >
    <Image Name="ani1" XPos="0" YPos="0" Width="146" Height="151" />
    <Image Name="ani2" XPos="146" YPos="0" Width="146" Height="151" />
    <Image Name="ani3" XPos="292" YPos="0" Width="146" Height="151" />
    <Image Name="ani4" XPos="438" YPos="0" Width="146" Height="151" />
    <Image Name="ani5" XPos="584" YPos="0" Width="146" Height="151" />
</Imageset>

2.新建动画的配置文件myAnimation.xml

<?xml version="1.0" ?>
<Animations>
        <AnimationDefinition name="MoveToLeft" duration="0.8" replayMode="loop">
            <Affector property="Image" interpolator="String">
                 <KeyFrame position="0.0" value="set:aniImagesets image:ani1" />
                 <KeyFrame position="0.2" progression="discrete" value="set:aniImagesets image:ani2" />
                 <KeyFrame position="0.4" progression="discrete" value="set:aniImagesets image:ani3" />
                                  <KeyFrame position="0.6" progression="discrete" value="set:aniImagesets image:ani4" />
                                  <KeyFrame position="0.8" progression="discrete" value="set:aniImagesets image:ani5" />
                                  <Subscription event="MouseEntersArea" action="Start" />
      </Affector>
        </AnimationDefinition>

</Animations>

name指的是动画的名字,duration 指的是总时间,replayMode 指的是播放模式,有once(只播放一次),loop(循环播放);下面的position中指的是每帧中的起始时间,value指的是对应的图片.  

3.在代码中生成新的动画实例,绑定到某个窗口中,且该窗口要有Image的属,设置ALPHA等属性,这样窗口不会盖住背景, 有透明效果

    //动画
    Window* staticImage = wmgr.createWindow("WindowsLook/StaticImage", "staticImage");
    staticImage->setProperty(("UnifiedAreaRect"),("{{0.2,20},{0.2,20},{0.2,200},{0.2,150}}"));
    staticImage->setProperty("FrameEnabled", "false");
    staticImage->setProperty("AlwaysOnTop", "true");
    //staticImage->setProperty("Alpha", "0.2");
    staticImage->setProperty("BackgroundEnabled", "false");
    staticImage->setProperty("FrameEnabled", "false");
    wRoot->addChildWindow(staticImage);

    //载入定义动画的文件
    AnimationManager::getSingleton().loadAnimationsFromXML("myAnimation2.xml");
    //找到一个动画定义
    Animation* animation = CEGUI::AnimationManager::getSingleton().getAnimation("MoveToLeft");
    //生成相应的动画实例,我们真正用的是动画实例
    AnimationInstance* ani = CEGUI::AnimationManager::getSingleton().instantiateAnimation(animation);
    ani->setTarget(staticImage);//绑定到相应的窗口,这个窗口一定要有Image的属性,不然会报错
    ani->start();
    ani->setSpeed(1.0f);//设置动画加速

 

4.在循环函数中添加时间脉冲,注意参数以秒为单位

//里面是float的时间参数


CEGUI::System::getSingleton().injectTimePulse(timeSinceLastFrame)

 

转载于:https://www.cnblogs.com/gamesky/archive/2013/01/22/2871625.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CEGUI(Crazy Eddie’s GUI http://www.cegui.org.uk)是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。 CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。另外,使用更高级的图形库也是可以的,比如OGRE、Irrlicht和RenderWare等,关键需求可以简化为二点: 纹理(Texture)的支持直接写屏(RHW的顶点格式、正交投影、或者使用shader实现) 本书截止日时,CEGUI的最新版本是0.6.0(本书的讨论也是基于此版本),本书光盘提供了SDK和全部源码的下载。 除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor和ImageSet编辑器,以方便UI和图像集的制作。作为界面编辑器,它需要系统级界面以提供编辑器操作,0.3.0版是基于MFC实现的;而在0.4.0版本以后,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见http://www.wxwidgets.org)实现。 目前将CEGUI作为游戏界面库开发的游戏已经有好多种,国内的天龙八部,巨人等游戏就是很好的例子。 CEGUI的功能是非常强大的,而且使用也非常的灵活,可以和脚本配合。可以通过配置文件自定义窗口外观。通过布局文件实现窗口布局等等特性,使得游戏的界面开发更加方便。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值