#swift #sprite-kit
#swift #sprite-kit
Вопрос:
Я следовал этому руководству, чтобы создать базовую платформерную игру. Однако я заметил, что обновление позиции foregroundNode
‘s в update
функции приводит к тому, что анимация становится далеко не гладкой. В частности, этот фрагмент кода (на данный момент я реализовал только слой переднего плана):
if (avatarNode.position.y - foregroundNode.position.y) > 0 {
foregroundNode.position = CGPoint(x: 0.0, y: -(avatarNode.position.y - 200.0))
}
Вот gif того, что я вижу на своем устройстве. Обратите внимание, как зеленый квадрат дрожит вертикально, когда он подпрыгивает. Странно то, что мой fps остается постоянным ~ 60 кадров в секунду.
Когда я комментирую код, который обновляет положение узла переднего плана, анимация становится намного более плавной, но камера больше не следует за узлом аватара. Что я делаю не так, что вызывает это сбоящее поведение?
Редактировать: вот мой исходный код.
Комментарии:
1. На сколько пикселей перемещается зеленый квадрат одновременно? Это 200? Попробуйте выполнить SKAction, чтобы переместить его в новую позицию, чтобы он не «прыгал» там.
2. @SteveIves да, он прыгает примерно на 200 пунктов за раз. Оценка в левом верхнем углу определяется количеством очков, которые он перемещает! Давайте попробуем использовать skaction! Сначала мне нужно разобраться, как это работает
3. ХОРОШО — вам, вероятно, понадобится
SKAction moveBy
, если я правильно помню.4. @SteveIves вместо того, чтобы добавлять импульс, я вместо этого сделал
avatarNode.run(SKAction.moveBy(x: 0, y: 200, duration: 0.2))
. Это не устранило проблему с сбоями. Я что-то упустил?5. Не имея возможности видеть весь ваш код, я не уверен. Выглядело ли движение как-то иначе? Вы можете изменить длительность (перемещения SKAction) на что-то вроде 1 с, просто чтобы определить, выглядит ли это плавно (т. Е. 200 точек за 0,2 с — это слишком быстро) или, возможно, SKAction не работает или выполняется должным образом.