Я пытаюсь добиться плавной анимации, используя Xamarin SkiaSharp.Основной проблемой является время между вызовом canvasView.InvalidateSurface ();и нажатие на mathod OnCanvasViewPaintSurface для выполнения перерисовки может варьироваться от 3 до 30 мс, что дает несколько резкий вид при перемещении объекта по экрану.Я попытался смягчить это, добавив мертвый цикл в коде отрисовки, который помогает некоторым, но не является хорошим решением.Я не понимаю, почему время так сильно меняется, и я не вижу в этом никакого пути.Вы не можете заснуть в коде розыгрыша.Как игры достигают плавной анимации?Мой код следует
async Task DoAnimationLoop()
{
while (DoAnimation)
{
AccumulatedTime = StopWatch1.ElapsedMilliseconds;
await Task.Delay(TimeSpan.FromMilliseconds(5));
if (AccumulatedTime > 50)
{
StopWatch1.Restart();
MoveItems();
SKCanvasView canvasView = Content as SKCanvasView;
TotalBounds = new Size(canvasView.Width,
canvasView.Height);
canvasView.InvalidateSurface();
}
}
}
private void OnCanvasViewPaintSurface(object sender,
SKPaintSurfaceEventArgs e)
{
AccumulatedTime = StopWatch1.ElapsedMilliseconds;
while (AccumulatedTime < 30)
{
AccumulatedTime = StopWatch1.ElapsedMilliseconds;
}
e.Surface.Canvas.Clear();
e.Surface.Canvas.DrawBitmap(Background, 0, 0);
foreach(Item item in AllItems)
{
e.Surface.Canvas.DrawBitmap(item.CurrentBitmap,
item.CurrentPositionX, item.CurrentPositionY);
}
}