Я создаю трехмерную игру с пещерой в качестве основного окружения. Пещера состоит из большого количества кольцевых сегментов, один из которых прикреплен к другому, что создает в настоящее время небольшую систему туннелей.
Если игрок находится внутри пещеры, видна только небольшая часть сегментов. Я полагаю, что на самом деле сокрытие невидимых сегментов может сэкономить много времени на процессоре, которое мне нужно для других объектов, таких как здания или враги.
Итак, сначала я пытаюсь скрыть всю пещеру, а затем Раскрытие видимых сегментов путем поворота «node.isHidden» в true и false. Определенные узлы находят и получают к ним доступ по их именам: ‚Node.childnode (withName:„ XYZ003 “, рекурсивно: false) .isHidden = true '(или false).
Работает до такой степени, что сегменты не скрыты, но как только я пытаюсь скрыть ранее невидимый сегмент, средство визуализации падает с EXC_BAD_ACCESS.
Делать скрытие на скрытом объекте (конечно, бесполезно, но помогает понять проблему) хорошо То же самое можно сказать о скрытых сегментах.
Следуя подсказке другого потока, я переместил подпрограмму в делегат средства визуализации, поэтому переключение выполнялось не в то время, а вместо этого на этапе, на котором такие изменения должны бывает, но это не помогло. В качестве альтернативы я скрывал (и скрывал) SCNActions, но получил тот же результат, который меня действительно озадачивает, так как это был бы своего рода «официальный» способ сделать это ...
Я также поэкспериментировал с «рекурсивным» логическим значением, получив тот же результат (работает для unhide, вылетает при isHidden = true).
Затем я попытался изменить непрозрачность или другие свойства узлов - что работало отлично. С другой стороны, попытка удалить узлы из родительского узла также привела к упомянутому cra sh.
Мне нужно, чтобы это работало, потому что старое оборудование никогда не сможет справиться с несколькими тысячами узлов (пробуя это, частота кадров упала до 10 кадров в секунду, даже без врагов вокруг). И новое оборудование может сломаться, как только появятся враги ...
Я думаю, что указатель каким-то образом испорчен первым показом (и, следовательно, ошибкой BAD_ACCESS), так что, возможно, дополнительное соединение (часто замечаемое с spritekit-рутины) или другой способ получить указатель узла может быть решением. С другой стороны, если указатель не работает, почему я все еще могу получить доступ ко всем другим свойствам? Возможно, именно подузлы вызывают проблему - у каждого из узлов есть 20 подузлов, которые также должны изменить видимость.
Кто-нибудь сталкивался с таким поведением до меня? Я не смог найти ничего во время моего исследования Google ...