Так что я пытаюсь сделать, это сделать простую полосу прокрутки, используя кинетическую модель. Проблема утомляет при перестрелке. Поведение, которое я хочу показать, заключается в том, что когда вы перешагиваете (пройдите мимо максимума/минимума), он увлажняет позиционирование.Перемещение смещения прокрутки - математический выпуск
Конкретное поведение, которое я хочу, это следующее: скажем, максимальная перегрузка 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.
Я уверен, что могу вычислить это рекурсивно (но я не хочу этого делать). Я думаю, что математические отношения довольно очевидны, хотя я не совсем уверен, как это сделать. Возможно, я даже думаю об этом неправильно, поэтому, пожалуйста, подумайте о том, чтобы игнорировать мой график.important Дело в том, что пользователь не может переместить окно за пределы максимального значения превышения (в данном случае 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
Edit: Название, Tag