SKAction.moveBy не работает, и я не могу сказать, почему - PullRequest
0 голосов
/ 25 февраля 2019

Я следовал учебному пособию Джареда Дэвидсона Как сделать Flappy Bird , и я не знаю, почему не работает одна из функций, использующих SKAction.moveBy.Я думаю, что часть проблемы в том, что это может быть в ландшафтном режиме.Пользователь должен коснуться экрана, который заставляет призрака прыгать и препятствия начинают двигаться.Кто-нибудь, пожалуйста, помогите.Вот мой код для одной функции:

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)
{
    if (gameStarted == false)
    {
        gameStarted = true
        let spawn = SKAction.run(
        {
            () in

            self.createObstacles()
        })

        let delay = SKAction.wait(forDuration: 2.0)
        let spawnDelay = SKAction.sequence([spawn, delay])
        let spawnDelayForever = SKAction.repeatForever(spawnDelay)
        self.run(spawnDelayForever)

        let distance = CGFloat(self.frame.width + 20)
        let moveObstacles = SKAction.moveBy(x: distance, y: 0, duration: TimeInterval( 0.01*distance))
        let removeObstacles = SKAction.removeFromParent()
        moveAndRemove = SKAction.sequence([moveObstacles, removeObstacles])

        ghost.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
        ghost.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 90))


    }
    else
    {
        ghost.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
        ghost.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 90))
    }

}

1 Ответ

0 голосов
/ 28 февраля 2019

Я только недавно столкнулся с этой же проблемой и смог ее решить, переместив

    let wallDistance = CGFloat(self.frame.size.width + wallPair.frame.width)
    let moveWall = SKAction.moveBy(x:  -wallDistance, y: 0, duration: 
            TimeInterval(0.008 * wallDistance))
    let removeWall = SKAction.removeFromParent()
    moveAndRemove = SKAction.sequence([moveWall, removeWall]) 

вниз под тем местом, где вы создаете верхнюю и нижнюю стены внутри createWalls.Я поставил его под setScales.

Затем после этого вы добавляете

    wallPair.run(moveAndRemove)

, где вы добавляете topWall и bottomWall как дочерние.

...