私がやろうとしているのは、キネティック モデルを使用して素敵なスクロール バーを作成することです。問題は、オーバーシュートの減衰です。私が示したい動作は、オーバーシュート (最大値/最小値を超える) と、ポジショニングが弱まるということです。
私が望む特定の動作は次のとおりです。たとえば、最大オーバーシュートは 50 ピクセルです。これは、私がどのように機能させたいかを表す表です。(これは、私が考えることができる、それを提示するための最良の方法です)。
Displacement | Position it | Percent
of position | Displays @ | Overshot Over
-------------------------------------------------
25 | 12.5 | 50%
100 | 25 | 100%
200 | 37.5 | 200%
400 | 43.75 | 400%
... ... ...
Note: Decimals would obviously round down so we can actually display it.
これを再帰的に計算できると確信しています(しかし、私はそれをしたくありません)。数学的関係はかなり明白だと思いますが、その方法は正確にはわかりません。 私はこれを間違った方法で考えているかもしれないので、私のチャートを無視することを検討してください. 重要なことは、ユーザーが最大オーバーシュート値(この場合は 50 ピクセル) を超えてウィンドウを移動できないことです。
これは、ポジショニング設定を実行するコードのセグメントです...
function KineticModel:SetPosition(NewPosition)
-- Set's the position of the kinetic model. Using this, it'll calculate velocity.
local CurrentTime = tick()
local ElapsedTime = CurrentTime - self.TimeStamp
local LocalVelocity = ((self.Position - self.LastPosition) * 5) / ElapsedTime
TimeStamp = CurrentTime
self:SetVelocity((0.2 * self.Velocity) + (0.8 * LocalVelocity)) -- 20% previous velocity maintained, 80% of new velocity used.
if NewPosition > self.Maximum then
print("[KineticModel] - Past Max Manual")
local Displacement = math.abs(NewPosition - self.Maximum)
-- Dampen position so it can't go over.
self.Position = self.Maximum + (Displacement / self.MaxBounce) -- This doesn't work. :(
elseif NewPosition < self.Minimum
print("[KineticModel] - Past Min Manual")
local Displacement = math.abs(NewPosition - self.Minimum)
-- Same displacement here
else
self.Position = NewPosition
end
self.LastPosition = self.Position
self.OnPositionChange(self.Position)
print("[KineticModel] - Set Velocity @ "..self.Velocity.."; Local Velocity @ "..LocalVelocity)
end
主な問題は、ディスプレイスメントを表示すべき数学的方法を見つけようとすることです。この変位を実装して、基本的にすべてのポイントで設定される前に位置を除外するので、潜在的な問題がある場合は教えてください.
ありがとう。:D
編集:タイトル、タグ