Fix scrolling hit object displayed in wrong position for one frame

This commit is contained in:
ekrctb 2020-12-07 17:26:12 +09:00
parent 8757c89246
commit a548269c34
1 changed files with 10 additions and 10 deletions

View File

@ -225,10 +225,19 @@ protected override void Update()
hitObject.LifetimeStart = computeOriginAdjustedLifetimeStart(hitObject);
toComputeLifetime.Clear();
}
// only AliveObjects need to be considered for layout (reduces overhead in the case of scroll speed changes).
protected override void UpdateAfterChildrenLife()
{
base.UpdateAfterChildrenLife();
// We need to calculate hit object positions (including nested hit objects) as soon as possible after lifetimes
// to prevent hit objects displayed in a wrong position for one frame.
// Only AliveObjects need to be considered for layout (reduces overhead in the case of scroll speed changes).
foreach (var obj in AliveObjects)
{
updatePosition(obj, Time.Current);
if (layoutComputed.Contains(obj))
continue;
@ -293,15 +302,6 @@ private void updateLayoutRecursive(DrawableHitObject hitObject)
}
}
protected override void UpdateAfterChildrenLife()
{
base.UpdateAfterChildrenLife();
// We need to calculate hitobject positions as soon as possible after lifetimes so that hitobjects get the final say in their positions
foreach (var obj in AliveObjects)
updatePosition(obj, Time.Current);
}
private void updatePosition(DrawableHitObject hitObject, double currentTime)
{
switch (direction.Value)