#ios #swift #performance #scenekit #code-cleanup
#iOS #swift #Производительность #scenekit #очистка кода
Вопрос:
У меня есть объект 3D car с некоторыми жестами панорамирования и касания, и все работает нормально. Проблема в том, что мне понадобились определенные ангелы, чтобы камера смотрела на каждую деталь, когда я увеличиваю ее, как на автомобиль, в котором так много деталей, поэтому я написал все родительские и дочерние узлы, чтобы указать каждый из них. Но я чувствую, что это не очень хорошая практика. Есть ли другой способ сделать это?
let parentNodeName = result.node.parent?.name
if parentNodeName == "up-side"{
scnCameraOrbit.eulerAngles.x = 2.3 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi * 1.0
}
else if parentNodeName == "front-side"{
if nodeName == "window-front"{
scnCameraOrbit.eulerAngles.x = 2.8 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi 3.16
}
else if nodeName == "hood"{
scnCameraOrbit.eulerAngles.x = 2.95 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi 3.16
}
else if nodeName == "bumper-front"{
scnCameraOrbit.eulerAngles.x = 3.45 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi 3.16
}
else{
scnCameraOrbit.eulerAngles.x = 3.45 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi 3.16
}
}
else if parentNodeName == "back-side"{
if nodeName == "window-rear"{
scnCameraOrbit.eulerAngles.x = 2.9 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi * 1.0
}
else if nodeName == "bumper-rear"{
scnCameraOrbit.eulerAngles.x = 3.4 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi * 1.0
}
else if nodeName == "trunk"{
scnCameraOrbit.eulerAngles.x = 3.0 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi * 1.0
}
else{
scnCameraOrbit.eulerAngles.x = 3.4 Float.pi
scnCameraOrbit.eulerAngles.y = Float.pi * 1.0
}
}
else if parentNodeName == "left-side"{
scnCameraOrbit.eulerAngles.x = -Float.pi * 0.0
scnCameraOrbit.eulerAngles.y = -3 * Float.pi * 1.2
}
else if parentNodeName == "right-side"{
scnCameraOrbit.eulerAngles.x = -Float.pi * 0.0
scnCameraOrbit.eulerAngles.y = -2 * Float.pi * 1.2
}
else{
return
}
Ответ №1:
Тесты IF вызываются только один раз при выполнении теста (щелчок), верно? Если да…
Чтобы избежать некоторой сложности вложенных IF, вы можете попробовать некоторые методы перечисления < 24701075 >, довольно много примеров в этом посте — прочитайте внимательно, некоторые из них устарели, и доступны новые функции Swift. Вам понадобится 2 набора (я полагаю), один для имен родительских узлов, а затем один набор для имен узлов. Не уверен в эффективности, но ясность улучшилась бы … мнения разнятся, но читаемость кода и избежание проблем с отладкой обычно являются для меня более приоритетными, если производительность не является реальной проблемой.