サンプル集
各サンプルはエフェクトのスクリプト欄にそのまま貼り付けて使えます。
Track0 ~ Track3 はパラメータパネルのトラックバーで調整できます。
使われている変数・関数の意味は各リファレンスページを参照してください。
基本
フェードイン(既定スクリプト)
obj.alpha = math.min(time * 255, 255)
フェードアウト
obj.alpha = math.max((obj.totalframe - obj.frame) / obj.framerate * 255, 0)
Track0 で不透明度を制御
obj.alpha = obj.track0
時間に応じて回転
obj.rz = time * 90
Track0 でズームを制御
obj.zoom = obj.zoom * (1 + obj.track0 / 100)
座標と動き
左右の揺れ
Track0 を振幅、Track1 を 1 秒あたりの周波数として使います。振幅の単位はピクセルです。
local amp = obj.track0
local freq = obj.track1
obj.x = obj.x + math.sin(time * anim.tau * freq) * amp
円運動
local r = obj.track0
local dx, dy = anim.polar(r, time * 90)
obj.x = obj.x + dx
obj.y = obj.y + dy
バウンド(跳ねる)
local h = obj.track0
obj.y = obj.y - anim.bounce(anim.pingpong(time, 1)) * h
ゆらぎ(ノイズによる手ぶれ風)
obj.x = obj.x + (anim.noise(time * 2, 0, 0) - 0.5) * 20
obj.y = obj.y + (anim.noise(0, time * 2, 0) - 0.5) * 20
obj.rz = (anim.noise(0, 0, time * 2) - 0.5) * 10
回転
度とラジアン
obj.rzr = time * anim.tau
加速しながら回転
obj.rz = anim.ease_in(obj.t) * 360
拡大・変形
弾むように登場(スケールイン)
local p = anim.duration(time, 0.3)
obj.zoom = obj.zoom * anim.elastic(p)
ぷにぷに(独立スケール)
local s = math.sin(time * anim.tau * 2) * 0.2
obj.sx = 1 + s
obj.sy = 1 - s
不透明度・フェード
遅延フェードイン
local p = anim.duration(anim.delay(time, 0.5), 1)
obj.alpha = p * 255
点滅(矩形波)
obj.alpha = anim.square(time, 4) * 255
滑らかな明滅(正弦波)
obj.alpha = anim.oscillate(time, 64, 255, 1)
イージングと範囲
2 点間をイージングで移動
local tx, ty = 200, -100
local p = anim.ease_in_out(obj.t)
obj.x = anim.lerp(obj.x, tx, p)
obj.y = anim.lerp(obj.y, ty, p)
行き過ぎてから戻る
obj.x = obj.x + anim.back(obj.t) * 200
しきい値で切り替え
obj.alpha = anim.smoothstep(0, 0.5, obj.t) * 255
他オブジェクトの参照
発射元へ向きながら移動する(ファンネル風)
local target = obj.getobject("routersys")
if target then
local p = anim.ease_in_out(obj.t)
local nx = anim.lerp(obj.x, target.x, p)
local ny = anim.lerp(obj.y, target.y, p)
obj.rz = math.deg(math.atan2(target.y - obj.y, target.x - obj.x))
obj.x = nx
obj.y = ny
end
一定速度で接近し、到達したら停止
local target = obj.getobject("routersys")
if target then
local dx = target.x - obj.x
local dy = target.y - obj.y
local dist = anim.len(dx, dy)
if dist > 0 then
local step = math.min(dist, obj.track0 * obj.time)
obj.x = obj.x + dx / dist * step
obj.y = obj.y + dy / dist * step
end
end
ピクセル操作
色の反転
for y = 0, obj.h - 1 do
for x = 0, obj.w - 1 do
local r, g, b, a = obj.getpixel(x, y)
obj.setpixel(x, y, 255 - r, 255 - g, 255 - b, a)
end
end
グレースケール(高速)
local pd = obj.getpixeldata()
local w = pd.width
local h = pd.height
for y = 0, h - 1 do
for x = 0, w - 1 do
local base = (y * w + x) * 4
local r = pd:get(base + 1)
local g = pd:get(base + 2)
local b = pd:get(base + 3)
local gray = r * 0.299 + g * 0.587 + b * 0.114
pd:set(base + 1, gray)
pd:set(base + 2, gray)
pd:set(base + 3, gray)
end
end
時間で色相を回す(虹色)
local hue = anim.wrap(time * 60, 0, 360)
local cr, cg, cb = anim.hsv_to_rgb(hue, 1, 1)
local pd = obj.getpixeldata()
local n = pd.width * pd.height
for i = 0, n - 1 do
local base = i * 4
pd:set(base + 1, pd:get(base + 1) * cr / 255)
pd:set(base + 2, pd:get(base + 2) * cg / 255)
pd:set(base + 3, pd:get(base + 3) * cb / 255)
end
図形・テキスト
星形を生成して回す
obj.load("figure", "star", 0xFFCC00, 200, 0, 0)
obj.rz = time * 90
テキストを生成する
obj.setfont("Yu Gothic UI", 48, 1, 0xFFFFFF)
obj.load("text", "サンプル")
環境に応じた制御
グループ内のインデックスで時間差をつける
local d = ymm4.group_index * 0.1
local p = anim.duration(anim.delay(time, d), 0.5)
obj.alpha = p * 255
出力時のみ挙動を変える
if ymm4.is_saving then
obj.alpha = 255
else
obj.alpha = 128
end