有没有更好的方法在Corona Lua中链接过渡效果?
2011-9-24 22:40:53
收藏:0
阅读:86
评论:4
我正在使用以下代码制作一个垃圾箱的动画,当将某物拖放到垃圾箱上时,垃圾箱会发生变化:
local trashUp
local trashDown
trashUp = function()
transition.to(
trash, {time=100, xScale=1.2, yScale=1.2, onComplete=trashDown })
end
trashDown = function()
transition.to(
trash, {time=100, xScale=1, yScale=1})
end
然后在想要开始动画时调用trashUp()。
代码可以正常工作,但我觉得它可以更好地编写。两个函数来实现对象的动画!
有没有更有效率的方法可以实现?
原文链接 https://stackoverflow.com/questions/7542357
点赞
stackoverflow用户5420
你可以通过在第一个转换调用中内联编写 onComplete
函数来完成它:
animateTrash = function()
transition.to(
trash,
{ time=100, xScale=1.2, yScale=1.2, onComplete=
function()
transition.to(
trash,
{time=100, xScale=1, yScale=1})
end
})
end
这不会使它更加**高效**,但它确保了所有与动画垃圾桶相关的代码在同一个位置。然而,我认为这种方法很容易失控,特别是如果你在动画垃圾桶时做任何不同于转换的事情,例如更新程序状态、创建/销毁其他对象等等。
与 jhocking 的答案相似,这种方法也不支持取消。
2011-09-25 16:51:32
stackoverflow用户2125302
这个问题很久了,但由于我也尝试做同样的事情,所以我想分享我想出来的东西。这个函数按顺序执行传递的变量参数中的过渡效果。如果提供了 onComplete,当其过渡效果完成时将被调用。
local function transitionSequence(target, step, ...)
local remaining_steps = {...}
if #remaining_steps > 0 then
local originalOnComplete = step.onComplete
step.onComplete = function(target)
if originalOnComplete then
originalOnComplete(target)
end
transitionSequence(target, unpack(remaining_steps))
end
transition.to(target, step)
else
transition.to(target, step)
end
end
示例:
transitionSequence(myImage,
{xScale=0.5, onComplete=function(t) print("squeeze") end},
{xScale=1, onComplete=function(t) print("relax") end},
{yScale=2, onComplete=function(t) print("stretch") end},
{yScale=1, onComplete=function(t) print("relax again") end})
2013-03-17 00:35:37
stackoverflow用户2656328
transition.to( trash, {time=t, delta=true, xScale=1.5, transition=easing.continousLoop} )
还有一个非常有用的例子:
easing.sin = function( f, a )
return function(t, tmax, start, d)
return start + delta + a*math.sin( (t/tmax) *f * math.pi*2 )
end
end
easing.sinDampened = function( f, a, damp )
return function(t, tmax, start, d)
return start + delta + a*math.sin( damp^(t/tmax) *f * math.pi*2 )
end
end
...等等。
2014-11-27 11:12:31
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
在单个函数中使用延迟设置第二个转换;参考以下代码示例:http://developer.anscamobile.com/reference/index/transitionto
但是,根据您的情况,这并不一定更简单,因为现在您需要同时跟踪两个转换,而不仅仅是一次转换。在您贴出的代码中,您没有跟踪转换,但如果在转换完成之前需要取消它们(例如,玩家在转换中间切换场景),则可能应该这样。