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

View File

@ -225,10 +225,19 @@ namespace osu.Game.Rulesets.UI.Scrolling
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 @@ namespace osu.Game.Rulesets.UI.Scrolling
}
}
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)