--track0:時間[s],0,5,0.5,0.01 --track1:余白[px],0,1000,8,0.1 --track2:距離[px],0,1000,50,0.1 --track3:重み,0,6,3,0.01 --check0:上に避ける,0 --dialog:スライドイン/chk,sIn=1;スライドアウト/chk,sOut=1;フェードする/chk,fade=1;スライド角度,sAngle=0;原点の統一,resetOrigin=0; -- 「通知風スクリプト v0.3」by イスターリャ(@is_ptcm) -- "MIT License" https://opensource.org/licenses/MIT -- -- 通知やコメントビューアのように、次のオブジェクトが来たら避けるアニメーションです。これいる? -- じつかいせき氏の"簡易スライドイン・アウト"をもとに改造しています。 -- https://www.nicovideo.jp/watch/sm17932405 -- そのほか特に気を付けるべき点はありません。dllとかも必要ないはず。 -- 「原点の統一」は以下のように処理されます。 -- 0 : 統一しない -- 1 : 左上 -- 2 : 右上 -- 3 : 左下 -- 4 : 右下 -- このスクリプトを適用したオブジェクトを同じ座標に配置するという利用法なので、エイリアスに登録すると便利だと思います。 local slideTime = obj.track0 local slideDist = obj.track2 local margin = obj.track1 local power = obj.track3 local zoom = obj.getvalue("zoom") / 100 local way = obj.check0 local deg = math.rad(sAngle) local t = obj.time local tt = obj.totaltime local diff_t = 1 if t < slideTime then diff_t = 1 - math.pow(1-t/slideTime, power) elseif tt - t < slideTime then diff_t = math.pow((tt-t)/slideTime, power) end local diff_y = 0 stock_diff_y = stock_diff_y or {} nof_objects = nof_objects or {} if nof_objects == nil or #nof_objects == 0 or nof_objects[#nof_objects] >= obj.layer then stock_diff_y = {} end -- debug_print("--------------------") -- debug_print("nof_objects[1] : "..tostring(nof_objects[1])) -- debug_print("#nof_objects : "..tostring(#nof_objects)) stock_diff_y_name = tostring(math.floor(obj.x)) .. "-" .. tostring(math.floor(obj.y)) stored_diff_y = stock_diff_y[stock_diff_y_name] if stored_diff_y == nil then stock_diff_y[stock_diff_y_name] = 0 else diff_y = stored_diff_y end if resetOrigin == 1 then obj.cx = -obj.w / zoom / 2 obj.cy = -obj.h / zoom / 2 elseif resetOrigin == 2 then obj.cx = obj.w / zoom / 2 - 1 obj.cy = -obj.h / zoom / 2 elseif resetOrigin == 3 then obj.cx = -obj.w / zoom / 2 obj.cy = obj.h / zoom / 2 - 1 elseif resetOrigin == 4 then obj.cx = obj.w / zoom / 2 - 1 obj.cy = obj.h / zoom / 2 - 1 end local acy = obj.cy * zoom + obj.h / 2 if way == false then diff_y = diff_y + margin + acy else diff_y = diff_y - margin - (obj.h - acy) end obj.oy = diff_y -- debug_print("diff_y : "..tostring(diff_y)) if way == false then diff_y = diff_y + (margin + (obj.h - acy)) * diff_t else diff_y = diff_y - (margin + acy) * diff_t end local r = 0 if t < slideTime and sIn == 1 then t = t tp = t / slideTime wait = 1 - diff_t if fade == 1 then obj.alpha = diff_t end r = slideDist * wait elseif tt - t < slideTime and sOut == 1 then diff_t = 1 - math.pow((tt-t)/slideTime,power) if fade == 1 then obj.alpha = 1 - diff_t end r = slideDist * diff_t else r = 0 end obj.ox = obj.ox + math.cos(deg) * r obj.oy = obj.oy + math.sin(deg) * r nof_objects[#nof_objects+1] = obj.layer stock_diff_y[stock_diff_y_name] = diff_y