为什么我在 spritekit 中移动对象时出现此错误

why i got this error while moving object in spritekit

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

我的代码是:

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)
}

我记错了:

Cannot invoke 'moveToY' with an argument list of type '(Int, duration: Int)'

我也试过了

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

又遇到同样的错误。你能帮我解决这个问题吗?

谢谢。

SKAction.moveToY 接受 Y 的 CGFloatdurationNSTimeInterval。因此,您需要将 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)
}