SKAction не работает, когда я использую его в пользовательском переходе

Я делаю игру, и я работаю над созданием пользовательского перехода. Переход в основном заключается в том, что каждый узел Sprite найдет ближайшую сторону, левую или правую. Если он горизонтально центрирован, то он находит ближайший край, верхний или нижний. Затем Sprite Node переместится с края на эту сторону. Если он будет идеально отцентрирован, он уменьшится в размере. После того, как все удалено, сцена изменяется и появляется следующая сцена. В сцене восемь элементов. Фон, заголовок, кнопка воспроизведения, кнопка справки, кнопка параметров, кнопка списка лидеров и кнопка магазина. Когда я нажимаю в любом месте сцены, начинается переход. Я не создал ту часть, где появляется новая сцена. Этот код до сих пор:

import SpriteKit

enum transitionTypes {
    case SlideOutside
    case Fade
}

enum slideDirection {
    case Left
    case Right
    case Up
    case Down
    case Shrink
}

func createTransition(transitionFrom currentScene: SKScene, to futureScene: SKScene, withTransition transition: transitionTypes) {

    print("Started Transition")

    switch transition {

    case .SlideOutside:

        print("Nodes Currently in Scene: \(currentScene.children)")
        print("")

        for child in currentScene.children as [SKNode] {

            print("Started Transition For Node \(child.name)")

            //This will keep the background from being effected
            if child.name != "background" {

                //Variable for which direction it should slide to
                var direction : slideDirection = .Shrink

                //Determines where the node should slide to
                if child.position.x < currentScene.frame.size.width / 2 {
                    direction = .Left
                } else if child.position.x > currentScene.frame.size.width / 2 {
                    direction = .Right
                } else if child.position.x == currentScene.frame.size.width / 2 {
                    if child.position.y < currentScene.frame.size.height / 2 {
                        direction = .Down
                    } else if child.position.y > currentScene.frame.size.height / 2 {
                        direction = .Up
                    } else if child.position.y == currentScene.frame.size.height / 2 {
                        direction = .Shrink //Skrink will keep its position the same but have its size shrink, instead
                    }
                }

                print("Determined Direction To Slide To")

                let slideAction : SKAction
                //Slides the node in the direction specified
                switch direction {
                case .Left:
                    slideAction = SKAction.applyImpulse(CGVectorMake(-25, 0), duration: 1.5)
                    child.runAction(slideAction)
                    break
                case .Right:
                    slideAction = SKAction.applyImpulse(CGVectorMake(25, 0), duration: 1.5)
                    child.runAction(slideAction)
                    break
                case .Up:
                    slideAction = SKAction.applyImpulse(CGVectorMake(0, 25), duration: 1.5)
                    child.runAction(slideAction)
                    break
                case .Down:
                    slideAction = SKAction.applyImpulse(CGVectorMake(0, -25), duration: 1.5)
                    child.runAction(slideAction)
                    break
                default: //The default is Shrink
                    break
                }

                print("Added SKAction to Node")

            } else {
                print("Excluded Background Properly")
            }

            print("Finished Transition For Node \(child.name)")
            print("")
        }

        print("Finished Transition")

        break

    default: //The Default will be Fade
        break
    }
} //This Code is Copyrighted

Вот журналы консоли:

Started Transition
Nodes Currently in Scene: [<SKSpriteNode> name:'background' texture:[<SKTexture> 'Background 1' (2497 x 2497)] position:{187.5, 333.5} scale:{1.00, 1.00} size:{375, 667} anchor:{0.5, 0.5} rotation:0.00, <SKSpriteNode> name:'title' texture:[<SKTexture> 'Title' (912 x 399)] position:{187.5, 500.25} scale:{1.00, 1.00} size:{284, 124} anchor:{0.5, 0.5} rotation:0.00, <SKSpriteNode> name:'playButton' texture:[<SKTexture> 'Play Button' (311 x 312)] position:{187.5, 166.75} scale:{1.00, 1.00} size:{100, 100} anchor:{0.5, 0.5} rotation:0.00, <SKSpriteNode> name:'optionsButton' texture:[<SKTexture> 'Options Button' (311 x 312)] position:{75, 216.75} scale:{1.00, 1.00} size:{75, 75} anchor:{0.5, 0.5} rotation:0.00, <SKSpriteNode> name:'shopButton' texture:[<SKTexture> 'Shop Button' (311 x 311)] position:{300, 216.75} scale:{1.00, 1.00} size:{75, 75} anchor:{0.5, 0.5} rotation:0.00, <SKSpriteNode> name:'helpButton' texture:[<SKTexture> 'Help Button' (311 x 311)] position:{75, 116.75} scale:{1.00, 1.00} size:{75, 75} anchor:{0.5, 0.5} rotation:0.00, <SKSpriteNode> name:'leaderboardButton' texture:[<SKTexture> 'Leaderboard Button' (311 x 312)] position:{300, 116.75} scale:{1.00, 1.00} size:{75, 75} anchor:{0.5, 0.5} rotation:0.00]

Started Transition For Node Optional("background")
Excluded Background Properly
Finished Transition For Node Optional("background")

Started Transition For Node Optional("title")
Determined Direction To Slide To
Added SKAction to Node
Finished Transition For Node Optional("title")

Started Transition For Node Optional("playButton")
Determined Direction To Slide To
Added SKAction to Node
Finished Transition For Node Optional("playButton")

Started Transition For Node Optional("optionsButton")
Determined Direction To Slide To
Added SKAction to Node
Finished Transition For Node Optional("optionsButton")

Started Transition For Node Optional("shopButton")
Determined Direction To Slide To
Added SKAction to Node
Finished Transition For Node Optional("shopButton")

Started Transition For Node Optional("helpButton")
Determined Direction To Slide To
Added SKAction to Node
Finished Transition For Node Optional("helpButton")

Started Transition For Node Optional("leaderboardButton")
Determined Direction To Slide To
Added SKAction to Node
Finished Transition For Node Optional("leaderboardButton")

Finished Transition

Все журналы консоли показывают, что переход прошел идеально. Поэтому я предполагаю, что проблема связана со SKAction, может кто-нибудь, пожалуйста, помогите мне найти, что не так. Спасибо!

1 ответ

Решение

Когда вы звоните:

slideAction = SKAction.applyImpulse(CGVectorMake(0, -25), duration: 1.5)

Вы прикладываете силу к физическому телу SKNode, Вы упомянули, что у них не было физических тел, а это значит, что их не "толкает" импульс.

Я бы порекомендовал использовать moveBy() вместо. Это переместит ваши спрайты, установив их positionне нажатием. Примером этого может быть:

slideAction = SKAction.moveBy(CGVector(dx: 0, dy: -25), duration: 1.5)

Я бы порекомендовал увеличить сумму dy идет, так что все узлы могут быть полностью удалены с экрана. Тебе нужно будет увидеть, как много, так как я не знаю размер твоей сцены.

Другие вопросы по тегам