1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-15 05:57:29 +08:00

Merge pull request #11113 from ekrctb/fix-scrolling-wrong-layout-one-frame

Fix scrolling hit object displayed in wrong position for one frame
This commit is contained in:
Dan Balasescu 2020-12-07 18:48:24 +09:00 committed by GitHub
commit 87da6b3270
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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)