Внутри моей сцены я переопределил функцию -(void) update: (CFTimeInterval) currentTime
по умолчанию. Стоит отметить, что переменная currentTime
на самом деле является истекшим временем с начала предположительно произвольного системного времени, в отличие от прошедшего времени с момента последнего кадра. Эта функция обновления проходит через все мои символы и применяет их движение, основанное на скорости в секунду и прошедшем времени с момента последнего обновления в секундах. Обычный способ получить прошедшее время с момента последнего обновления в секундах - это иметь NSTimeInterval в вашем классе, в котором хранится последнее обновление, и вычитать последнее время обновления с текущего времени обновления, истекшие секунды. Однако начальное истекшее время не равно нулю. Таким образом, вычитание нуля из очень большого числа дает воспринимаемое истекшее время в течение многих десятков тысяч секунд. Таким образом, любые персонажи, уже находящиеся в движении на самом первом кадре, будут перемещаться очень далеко.Получение начального истекшего времени SpriteKit
Очевидным решением для этого было бы установить последнее время обновления до истечения начального времени. Тем не менее, я не вижу никакого способа получить доступ к этому в пределах SKScene
, а точнее в пределах -(void) didMoveToView: (SKView *) view
.
Другим решением было бы установить начальный CFTimeInterval на отрицательное число, например -1
. Затем можно проверить каждую функцию обновления, будет ли время -1
. Если это так, можно установить истекшее время с момента последнего обновления до 0
, иначе можно было бы сделать обычный elapsedTime = currentTime - lastUpdate
. Тем не менее, делая эту инструкцию if, каждая функция обновления кажется беспорядочной и ненужной.
Есть ли другие способы найти это прошедшее время с момента последнего обновления точно?
Если ваша игра не является симуляцией в реальном времени, имеет ли смысл использовать временной интервал таким образом? Если игра пропускает обновление или два, имеет ли смысл заставить персонажей мгновенно перейти на новую позицию? Это справедливо для пользователя? Кроме того, что происходит с истечением времени, когда пользователь нажимает кнопку «Домой», а затем перезапускает игру позднее? – Epsilon