Как использовать .xscale, который работает в зависимости от того, в какую сторону движется узел?

Я делаю игру с помощью SpriteKit, в которой у меня есть узел, который постоянно перемещается вперед и назад с левой стороны экрана на правую, используя эту последовательность действий SKAction:

func move(){

    let recursive = SKAction.sequence([
        SKAction.moveByX(frame.size.width/2.8, y: 0, duration: NSTimeInterval(4),
        SKAction.moveByX(-frame.size.width/2.8, y: 0, duration: NSTimeInterval(4),
        SKAction.runBlock({self.move()})])
        doc.runAction(recursive, withKey: "move")
}  

Узел представляет собой SKTexture, и я использую атлас под названием WalkRight. Что я пытаюсь сделать, так это то, что при запуске SKAction.moveByX(-frame.size.width/2.8, y: 0, duration: NSTimeInterval(4) я хочу использовать .xscale для поворота моих изображений walkRight. Я не могу понять, как включить этот код в мою последовательность SKAction.

Ниже приведен мой код для добавления атласа на случай, если это необходимо для ответа на вопрос.

//In class
var docWalkingFrames: [SKTexture]!

 // general runAction method to make doc walk.
func walkingDoc() {
    doc.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(docWalkingFrames,timePerFrame: 0.3,resize: false,restore: true)),withKey:"walkingInPlaceDoc")
}

//In didMoveToView
  //doc animation walk right
    let docAnimatedAtlas = SKTextureAtlas(named: "WalkRight")
    var walkFrames = [SKTexture]()
    let numImages = docAnimatedAtlas.textureNames.count
    for var i=1; i<=numImages; i++ {
        let docTextureName = "docRight\(i)"
        walkFrames.append(docAnimatedAtlas.textureNamed(docTextureName))
    }

    docWalkingFrames = walkFrames

    let firstFrame = docWalkingFrames[0]
    doc = SKSpriteNode(texture: firstFrame)
    doc.position = CGPoint(x:self.frame.size.width/3.1, y:self.frame.size.height/2)
    doc.size = CGSize(width: 220, height: 470)
    doc.zPosition = 2
    addChild(doc)

walkingDoc()

person NickyNick321    schedule 20.06.2015    source источник


Ответы (1)


Используйте пользовательское действие блока и в этом действии запустите проверку, чтобы увидеть, движется ли оно влево или вправо, а затем соответствующим образом отрегулируйте xScale узла. xScale -1 и xScale 1 — значения, которые вы будете использовать.

person Wraithseeker    schedule 21.06.2015
comment
Спасибо за ответ. Я не могу понять, как запустить проверку, чтобы увидеть, идет ли он влево или вправо. - person NickyNick321; 21.06.2015
comment
@NickyNick321 вместо использования SKAction в своей последовательности используйте блочные функции, подобные тому, что вы сделали для self.move. Таким образом, вы можете различать левое и правое. - person Wraithseeker; 22.06.2015