Xcode Swift SpriteKit SkSpriteNode Y值不移动,但X是

时间:2016-10-01 01:26:59

标签: swift xcode sprite skaction

在移动动作中,Y值不会改变,我不知道为什么因为X值正在改变。 changeY变量正在使用正确的值5.0或-5.0执行其工作,但是"播放器"上的Y值。 SkSpriteNode没有变化。请帮忙。

 override func update(_ currentTime: TimeInterval) {

    let percent = touchLocation.x / size.width
    let newAngle = percent * 180 - 180
    print(newAngle)
    if playButtonPressed{

        var changeY = 0.0
        if newAngle >= -180{
            changeY = 5.0
        }
        else{
            changeY = -5.0
        }
        player.zRotation = CGFloat(newAngle) * CGFloat(M_PI) / 180.0
        print(changeY)
        var move = SKAction.moveBy(x: -(player.position.x+1), y: CGFloat(changeY), duration: 2000.0)
        player.run(move)
    }
}

1 个答案:

答案 0 :(得分:0)

我并不完全清楚你的最终目标是什么,但你的计算似乎是。特别是运动的持续时间是2000秒。这超过30分钟(!)x计算还表明您实际上计划使用moveTo而不是moveBy,因为您正在进行此操作。

以下是基于您的代码,但由于我不确定您的实际目标是什么,如下所示:如果触摸位于屏幕的左侧,则向左+向上移动,向下移动+向右移动触摸位于屏幕的右侧......

override func update(_ currentTime: TimeInterval) {
    if playButtonPressed {
        let percent = touchLocation.x / size.width
        let newAngle = percent * 180 - 180
        player.zRotation = CGFloat(newAngle) * CGFloat(M_PI) / 180.0

        let moveRightAndUp = touchLocation.x>size.width/2
        let changeY: CGFloat = moveRightAndUp ? 5.0 : -5.0
        let changeX: CGFloat = moveRightAndUp ? 1.0 : -1.0
        let move = SKAction.moveBy(x: changeX, y: changeY, duration: 1/60)
        player.run(move)
    }
}