引擎内置的  种动画
--PosChangeAnimation 平移
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("PosChangeAnimation")
ani:BindObj(imageObj)
ani:SetTotalTime()
ani:SetLoop(true)
ani:SetKeyFramePos(,,,)
imageObj:GetOwner():AddAnimation(ani)
ani:Resume() --AngleChangeAnimation 旋转
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("AngleChangeAnimation")
ani:BindObj(imageObj)
ani:SetKeyFrameAngle(,,,,,)
ani:SetTotalTime()
ani:SetLoop(true)
ani:SetBlendMode("AntiAlias")
imageObj:GetOwner():AddAnimation(ani)
ani:Resume() --AlphaChangeAnimation 透明度
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("AlphaChangeAnimation")
ani:BindRenderObj(imageObj)
ani:SetTotalTime()
ani:SetKeyFrameAlpha(,)
imageObj:GetOwner():AddAnimation(ani)
ani:Resume() --SeqFrameAnimation 序列帧
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("SeqFrameAnimation")
ani:BindImageObj(imageObj)
ani:SetTotalTime()
ani:SetLoop(true)
ani:SetResID("ImageSeq.BoltTest.SeqAni")
imageObj:GetOwner():AddAnimation(ani)
ani:Resume() --TurnObjectAnimation 对象1旋转到对象2
local imageObj2 = ctrlObj:GetControlObject("TestAni2.Texture")
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("TurnObjectAnimation")
ani:BindRenderObj(imageObj1,imageObj2)
ani:SetFlag("RoundY")
ani:SetTotalTime("")
imageObj1:GetOwner():AddAnimation(ani)
ani:Resume() --MaskChangeAnimation MaskObject 位置改变
local maskObj = ctrlObj:GetControlObject("MaskAni.Mask")
local uiObject = ctrlObj:GetControlObject("MaskAniBkg.Texture")
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("MaskChangeAnimation")
ani:BindMaskObj(maskObj)
ani:SetMaskKeyFrame(,,,,,-,,)
ani:SetLoop(true)
ani:SetTotalTime()
maskObj:GetOwner():AddAnimation(ani)
ani:Resume() MaskObject 的使用方法参考相关文档;
注意这里只调用了 BindMaskObj 而没有调用 BindTargetObj ,不知道为啥调用了 BindTargetObj 之后动画并不会被执行
注意:不知道为啥旋转动画不能在OnInitControl里面直接使用,需要用AsynCall调用才行:
function OnInitControl(ctrlObj)
local imageObj = ctrlObj:GetControlObject("TestAni.Image") AsynCall(function() -- 异步调用
-- AngleChangeAnimation 旋转
local rotateAni = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("AngleChangeAnimation")
rotateAni:BindObj(imageObj)
rotateAni:SetKeyFrameAngle(,,,,,)
rotateAni:SetTotalTime()
rotateAni:SetLoop(false)
rotateAni:SetBlendMode("AntiAlias")
imageObj:GetOwner():AddAnimation(rotateAni)
rotateAni:Resume()
end)
end 自定义动画:
在 xml 文件里定义动画模版:
<animation_def class="BoltTest.ani">
<method_def>
<Action file="MainWnd.xml.lua" func="BoltTestAni_Action"/>
<BindObj file="MainWnd.xml.lua" func="BoltTestAni_BindObj"/>
<GetBindObj file="MainWnd.xml.lua" func="BoltTestAni_GetBindObj" />
</method_def>
</animation_def> 在 lua 文件里使用动画:
function BoltTestAni_Action(aniSelf)
local attr = aniSelf:GetAttribute()
local bindObj = attr.BindObj
if bindObj == nil then
return
end local totalTime = aniSelf:GetTotalTime()
local runningTime = aniSelf:GetRuningTime() --[[ 按时间缩小
local progress = (totalTime - runningTime) / totalTime
if progress < 0 then
progress = 0
end
local l,t,r,b = bindObj:GetObjPos()
bindObj:SetObjPos(l,t,r,t+(b-t)*progress)
--]] -- 按指定间隔切换图片
local frameTime =
local progress = runningTime / frameTime +
if progress > then
progress =
elseif progress < then
progress =
end
progress = math.floor(progress)
bindObj:SetResID("Bitmap.BoltTest.SeqAni"..progress)
end
function BoltTestAni_BindObj(aniSelf, obj)
local attr = aniSelf:GetAttribute()
attr.BindObj = obj
end
function BoltTestAni_GetBindObj(aniSelf)
local attr = aniSelf:GetAttribute()
return attr.BindObj
end 注意:XLUE 每隔 / 秒刷新一次界面,每次刷新时改变对象的状态,这是自定义动画的基本原理;
Action 方法每隔 / 秒调用一次;
BindObj 方法里通过 attr 表来保存要渲染的对象;
GetRuningTime 方法获取动画的运行时间,因为是每隔 / 秒调用一次 Action 方法,所以 GetRuningTime 也是每隔 / 递增 动画的状态改变事件:
-- state: 0 动画未绑定对象;1 动画准备就绪;2 动画正在执行;3 动画暂停; 4 动画结束
ani:AttachListener(true, function(aniSelf, oldState, newState)
-- TODO
end)
注意这里,如果设定动画 SetLoop(true) state 将在 和 之间转换;
对一个动画进行 Stop,state 变为 而不是 ;也就是动画结束而不是动画暂停;
对一个动画进行 Stop,再调用 resume 并不能够使暂停的动画重新开始;
对一个动画进行 Stop,该动画实例即失效,需要重新创建该动画才能使动画重新运行 同时执行多个动画:
将多个动画对象绑定到同一个 UIObject 上即可:
-- PosChangeAnimation 平移
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("PosChangeAnimation")
ani:BindObj(imageObj)
ani:SetTotalTime()
ani:SetLoop(false)
ani:SetKeyFramePos(,,,)
imageObj:GetOwner():AddAnimation(ani)
ani:Resume() --SeqFrameAnimation 序列帧
local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory"):CreateAnimation("SeqFrameAnimation")
ani:BindImageObj(imageObj)
ani:SetTotalTime()
ani:SetLoop(true)
ani:SetResID("ImageSeq.BoltTest.SeqAni")
imageObj:GetOwner():AddAnimation(ani)
ani:Resume()
注意这里,不知道为啥 AngleChangeAnimation 旋转动画跟 SeqFrameAnimation 序列帧动画不能一起用; 执行动画序列:
local function StartAnimSequence(onFinish, ...)
local function StartAnim(aniIndex)
if arg[aniIndex] == nil then
onFinish()
return
end
arg[aniIndex]:AttachListener(true, function(aniSelf, oldState, newState)
if newState == then
StartAnim(aniIndex + )
end
end)
arg[aniIndex]:Resume()
end
StartAnim()
end
StartAnimSequence(function() return end, posAni, rotateAni)
尝试用这种方法封装一个执行动画序列的方法;发现不行,不知道为啥; 动画曲线:
在资源 xml 里定义 curve 资源,可使用 CurveTool 工具来定义:
<curve id="Curve.BoltTest.MyAni" type="bspline">
<controlpoint tp="0.000000" sp="0.000000"/>
<controlpoint tp="0.854396" sp="0.025281"/>
<controlpoint tp="0.859890" sp="0.977528"/>
<controlpoint tp="0.997253" sp="1.000000"/>
</curve>
在自定义动画里通过 Curve:GetProgress(tp) 传入一个时间,获取对应的进度:
local curve = aniSelf:GetCurve()
local tp = runningTime / totalTime
local progress = curve:GetProgress(tp)
利用这个 progress 来设定进度即可

Bolt 动画的更多相关文章

  1. 动画requestAnimationFrame

    前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...

  2. 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画

    CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...

  3. CSS 3学习——animation动画

    以下内容根据官方文档翻译以及自己的理解整理. 1.  介绍 本方案介绍动画(animations).通过动画,开发者可以将CSS属性值的变化指定为一个随时间变化的关键帧(keyframes)的集合.在 ...

  4. javascript动画系列第三篇——碰撞检测

    前面的话 前面分别介绍了拖拽模拟和磁性吸附,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题.本篇将详细介绍碰撞检测 原理介绍 碰撞检测的方法有很多, ...

  5. 虾扯蛋:Android View动画 Animation不完全解析

    本文结合一些周知的概念和源码片段,对View动画的工作原理进行挖掘和分析.以下不是对源码一丝不苟的分析过程,只是以搞清楚Animation的执行过程.如何被周期性调用为目标粗略分析下相关方法的执行细节 ...

  6. Visaul Studio 常用快捷键的动画演示

    从本篇文章开始,我将会陆续介绍提高 VS 开发效率的文章,欢迎大家补充~ 在进行代码开发的时候,我们往往会频繁的使用键盘.鼠标进行协作,但是切换使用两种工具会影响到我们的开发速度,如果所有的操作都可以 ...

  7. transtion:过渡动画

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px Monaco; color: #4f5d66 } p.p2 { margin: 0.0px 0 ...

  8. 再谈CAAnimation动画

    CAAnimaton动画分为CABasicAnimation & CAKeyframeAnimation CABasicAnimation动画, 顾名思义就是最基本的动画, 老规矩先上代码: ...

  9. jQuery动画-圣诞节礼物

    ▓▓▓▓▓▓ 大致介绍 下午看到了一个送圣诞礼物的小动画,正好要快到圣诞节了,就动手模仿并改进了一些小问题 原地址:花式轮播----圣诞礼物传送 思路:动画中一共有五个礼物,他们平均分布在屏幕中,设置 ...

随机推荐

  1. Sql Server 常用自定义函数

    -- select * from [dbo].[SplitToTable]('ADSF','|') -- 分解字符串 ALTER FUNCTION [dbo].[SplitToTable] ( @Sp ...

  2. 安装Golang 1.6及开发环境

    安装Golang 1.6及开发环境=====================================> 下载软件    * go1.4.2.linux-amd64.tar.gz     ...

  3. 如何用js获取当前url的参数值

    <script language = javascript> function request(paras){ var url = location.href; var paraStrin ...

  4. 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!

    瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...

  5. C# - 设置DLL的属性Embed Interop Type 设为False

    错误: Error msg: A reference was created to embedded interop assembly. because of an indirect referenc ...

  6. win8 任务栏不合并隐藏标题

    让win8任务栏不合并,并且隐藏标题的办法: 效果如下: 首先让win8不合并任务栏 1.任务栏上点鼠标右键 -- "属性" 2."任务栏按钮"选择" ...

  7. [设计模式] 3 创建者模式 builder

    转载http://blog.csdn.net/wuzhekai1985/article/details/6667467 建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不 ...

  8. 帝国cms如何调用栏目别名作为分类标题?[!--classname--]标签不能用

    用帝国cms建站安全性和生成速度会比dedecms好些,但ecms有个比较不方便的地方就是后台默认模板栏目那边没有一个seo标题设置的输入框,列表模板用的是[!--pagetitle--]标签,那么分 ...

  9. 精华阅读第 10 期 |解开阿尔法狗(AlphaGo)人工智能的画皮

    谷歌用一个变了身的古老「穷举算法」,披上「神经网络」的画皮,假装「跨时代」的黑科技,忽悠广大「膜拜者」,「狮仙」我实在看不下去了,来揭一揭这只幺蛾子小狗的画皮. 本期是移动开发精英俱乐部的第10期推荐 ...

  10. Binary Search Tree In-Order Traversal Iterative Solution

    Given a binary search tree, print the elements in-order iteratively without using recursion. Note:Be ...