Итак, у меня есть узел, который я хочу перемещать по оси x, y или z (в зависимости от переданного параметра).Значение расстояния, которое оно должно пройти, также передается в функцию.У меня все получилось, но это ужасный стиль кодирования, и я думаю, что рано или поздно у меня начнется головная боль из-за этого.Я хотел бы получить несколько полезных мыслей для аккуратной реализации этого.
Например: когда я вызываю moveElements(onAxis: "X", val: "10.0")
, я хочу, чтобы узел перемещался на 10 вдоль оси X.
Вотмоя текущая функция:
func moveElements(onAxis: String, val: Double){
var moveAction = SCNAction()
// In this switch statement I check if the value is a positive or negative number.
// I need these two cases because I call different function for >0 and <0
switch val {
// If positiv, I want to move a node on the passed onAxis parameter, by the value val. Here I have trouble finding a neat solution.
case 1...:
if (onAxis == "X") {
moveAction = SCNAction.moveBy(x: val, y: 0, z: 0, duration: 1)
} else if (onAxis == "Y"){
moveAction = SCNAction.moveBy(x: 0, y: val, z: 0, duration: 1)
} else {
moveAction = SCNAction.moveBy(x: 0, y: 0, z: val, duration: 1)
}
// call valGreaterThanZero()
break
case ..<0:
if (onAxis == "X") {
moveAction = SCNAction.moveBy(x: val, y: 0, z: 0, duration: 1)
} else if (onAxis == "Y"){
moveAction = SCNAction.moveBy(x: 0, y: val, z: 0, duration: 1)
} else {
moveAction = SCNAction.moveBy(x: 0, y: 0, z: val, duration: 1)
}
// call valLessThanZero()
break
default:
fatalError()
}
}
Я думаю, я мог бы сделать нас из двух разных функций moveDown(), moveUp()
.Но мне бы хотелось иметь только одно действие moveAction, которое проверяет заданный параметр onAxis: String
и, основываясь на этой оси, заполняет SCNAction.moveBy(x:,y:,z:)
.