为什么我在spritekit中移动对象时遇到此错误

时间:2015-05-01 14:50:30

标签: swift skspritenode

我正在努力制作类似塔防的游戏。我正在向我的地图添加单位,我想尝试将移动点移动到另一个点。

我的代码是:

func setTheNode(position:[Int],speed:[Int]){
        let moveDown1 = SKAction.moveToY(300, duration:4)
        let moveRight1 = SKAction.moveToX(300, duration: 3)

        let sequence = SKAction.sequence([moveDown1, moveRight1]);
        self.runAction(sequence)

    }

这有效,但是我想从参数中读取这些位置和持续时间。 当我这样尝试时:

     func setTheNode(position:[Int],speed:[Int]){
                let moveDown1 = SKAction.moveToY(position[0], duration:speed[0])
                let moveRight1 = SKAction.moveToY(position[1], duration:speed[1])
            let sequence = SKAction.sequence([moveDown1, moveRight1]);
            self.runAction(sequence)
}

我犯了错误:

  

无法调用' moveToY'使用类型'的参数列表(Int,duration:   INT)'

我也试过

let moveDown1 = SKAction.moveToY(position[0] as? Int, duration:speed[0] as? Int)

再次遇到同样的错误。你能帮帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

SKAction.moveToY接受Y CGFloatNSTimeInterval duration。因此,您需要将position的类型更改为[CGFloat],将speed的类型更改为[NSTimeInterval]

我的代码还有一些其他注意事项:

1。我认为这是一个错字 - 你在第二个函数中写了let moveRight1 = SKAction.moveToY。应该是SKAction.moveToX吗?

2。您正在使用speed来表示时间。这会给你一些奇怪的结果,因为速度和时间是成反比的。因此,通过实施,如果增加speed,节点移动的时间会更长......

我建议像这样编写你的函数:

func setTheNode(deltaPosition dp: CGVector, times: (x: NSTimeInterval, y: NSTimeInterval)){
    let moveDown1  = SKAction.moveToY(dp.dx, duration: times.x)
    let moveRight1 = SKAction.moveToX(dp.dy, duration: times.y)

    let sequence = SKAction.sequence([moveDown1, moveRight1]);
    self.runAction(sequence)
}