我正在努力制作类似塔防的游戏。我正在向我的地图添加单位,我想尝试将移动点移动到另一个点。
我的代码是:
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)
再次遇到同样的错误。你能帮帮我吗?
谢谢。
答案 0 :(得分:1)
SKAction.moveToY
接受Y CGFloat
和NSTimeInterval
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)
}