Как использовать переданный параметр, чтобы установить ось в SCNAction.moveBy в Swift - PullRequest
0 голосов
/ 27 февраля 2019

Итак, у меня есть узел, который я хочу перемещать по оси 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:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...