Изменить размер узла при запуске анимации в Swift - PullRequest
0 голосов
/ 22 мая 2018

Я делаю довольно простую игру для собственного исследования в Swift.Пока у меня запущена игра (без столкновений), и по большей части все хорошо.В игре в верхней части экрана появляются объекты, скорость которых увеличивается по мере прохождения игры.Цель состоит в том, чтобы перепрыгнуть как можно больше объектов, пока вы не столкнетесь с одним из них.На снимке ниже - скриншот того, что у меня есть.Желтый планер внизу экрана должен перепрыгивать через объект после обнаружения touchesEnded.

Я сделал несколько изображений, чтобы он выглядел так, как будто мой планер спрыгнул с траектории, чтобы перепрыгнуть черезобъект.Я думал, что было бы довольно просто, где я мог бы запустить анимацию после того, как игрок коснулся экрана, потому что я сделал каждый отдельный кадр (png) разного размера (они должны увеличиваться, пока не достигнет максимальной высоты прыжка, а затем вернуться кменьше на землю).Проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю animate, размер моих изображений никогда не меняется, хотя они имеют разную ширину в пикселях.Итак, мой вопрос: как мне сделать так, чтобы мой «планерный» узел увеличивался по мере запуска анимации, а затем возвращался к меньшему?Это можно исправить в коде?Нужно ли хранить изображения где-то еще (они находятся в папке в моем проекте с именем animation.atlas)?Любая помощь будет принята с благодарностью.

This is a screen shot of the game, it is

Вот код, который я использую на данный момент только для анимации (без изменения размера, потому что я могу 'это понять).Он проходит через массив один раз, затем снова, чтобы вернуться назад, когда я делал анимацию от начала прыжка до максимальной высоты:

self.gliderSprite.run(SKAction.sequence([SKAction.animate(with: gliderTextureArray, timePerFrame: 0.1, resize: false, restore: false),
                                            SKAction.wait(forDuration: 0.1),
                                            SKAction.animate(with: gliderTextureArray.reversed(), timePerFrame: 0.1, resize: false, restore: false)]))

1 Ответ

0 голосов
/ 22 мая 2018

Если я правильно читаю, вы хотите, чтобы это выглядело так, как будто ваш "корабль" перепрыгивает розовые точки?Это очень просто, просто используйте SKAction.scale:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let location = touch.location(in: self)
        if self.contains(location) {
            gliderSprite.run(SKAction.sequence([SKAction.scale(to: 1.3, duration: 0.7),
                                                SKAction.wait(forDuration: 0.5),
                                                SKAction.scale(to: 1.0, duration: 0.7)]))
        //The lower the duration, the quicker it will run.
        }
    }
}

Протестировано и функционирует.Я не знаю, как быстро идет ваша игра, поэтому вам придется самим настраивать время.

...