为什么我在 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 的 CGFloat
和 duration
的 NSTimeInterval
。因此,您需要将 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)
}
我正在尝试制作类似塔防的游戏。我正在向我的地图添加单位,我想尝试将点移动到另一个点。
我的代码是:
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 的 CGFloat
和 duration
的 NSTimeInterval
。因此,您需要将 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)
}