在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):kikito/tween.lua开源软件地址(OpenSource Url):https://github.com/kikito/tween.lua开源编程语言(OpenSource Language):Lua 95.8%开源软件介绍(OpenSource Introduction):tween.luatween.lua is a small library to perform tweening in Lua. It has a minimal interface, and it comes with several easing functions. Exampleslocal tween = require 'tween'
-- increase the volume of music from 0 to 5 in 10 seconds
local music = { volume = 0, path = "path/to/file.mp3" }
local musicTween = tween.new(10, music, {volume = 5})
...
musicTween:update(dt)
-- make some text fall from the top of the screen, bouncing on y=300, in 4 seconds
local label = { x=200, y=0, text = "hello" }
local labelTween = tween.new(4, label, {y=300}, 'outBounce')
...
labelTween:update(dt)
-- fade background from white to black and foregrond from black to red in 2 seconds
-- Notice that you can use subtables with tween
local properties = {bgcolor = {255,255,255}, fgcolor = {0,0,0}}
local fadeTween = tween.new(2, properties, {bgcolor = {0,0,0}, fgcolor={255,0,0}}, 'linear')
...
fadeTween:update(dt) DemoThere is a demo in the "demo" branch of this repo: https://github.com/kikito/tween.lua/tree/demo You will need LÖVE to execute the demo. In the animation above, you can see how the user can move time "forwards or backwards" by pressing and releasing the space key. InterfaceTween creationlocal t = tween.new(duration, subject, target, [easing]) Creates a new tween.
This function only creates and returns the tween. It must be captured in a variable and updated via Tween methodslocal complete = t:update(dt) Gradually changes the contents of
When the tween is complete, the values in If This method is roughtly equivalent to local complete = t:set(clock) Moves a tween's internal clock to a particular moment.
If clock is greater than t:reset() Resets the internal clock of the tween back to 0, resetting
This method is equivalent to Easing functionsEasing functions are functions that express how slow/fast the interpolation happens in tween.
The easing functions can be found in the table They can be divided into several families:
Each family (except
When you specify an easing function, you can either give the function name as a string. The following two are equivalent: local t1 = tween.new(10, subject, {x=10}, tween.easing.linear)
local t2 = tween.new(10, subject, {x=10}, 'linear') But since local t3 = tween.new(10, subject, {x=10}) Custom easing functionsYou are not limited to tween's easing functions; if you pass a function parameter in the easing, it will be used. The passed function will need to take 4 parameters:
And must return the new value after the interpolation occurs. Here's an example using LÖVE's Bezier Curve (you will need LÖVE for this example, but tween.lua does not need LÖVE in general). local cubicbezier = function (x1, y1, x2, y2)
local curve = love.math.newBezierCurve(0, 0, x1, y1, x2, y2, 1, 1)
return function (t, b, c, d) return c * curve:evaluate(t/d) + b end
end
local label = { x=200, y=0, text = "hello" }
local labelTween = tween.new(4, label, {y=300}, cubicbezier(.35, .97, .58, .61)) Gotchas / Warnings
InstallationJust copy the tween.lua file somewhere in your projects (maybe inside a /lib/ folder) and require it accordingly. Remember to store the value returned by require somewhere! (I suggest a local variable named tween) local tween = require 'tween' You can of course specify your own easing function. Just make sure you respect the parameter format. SpecsThis project uses busted for its specs. In order to run them, install busted, and then execute it on the top folder:
CreditsThe easing functions have been copied from EmmanuelOga's project in https://github.com/emmanueloga/easing See the LICENSE.txt file for details. ChangelogSee CHANGELOG.md for a full list of changes. |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论