SCNSceneRendererDelegate
Наследование
Не применимый
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в iOS 8.0 и позже.
SCNSceneRendererDelegate
протокол определяет методы, позволяющие Вашему приложению участвовать в анимации SceneKit и представляющий процесс. Для создания приложения или игры с SceneKit Вы используете SCNView
объект (или другой объект, соответствующий SCNSceneRenderer
протокол) для отображения сцены. Затем чтобы добавить игровую логику на кадр или выполнить пользовательский OpenGL, представляющий прежде или после, SceneKit представляет сцену, укажите свой собственный объект, реализующий SCNSceneRendererDelegate
протокол для представления delegate
свойство.
При рендеринге сцены, SCNView
объект (или другое средство рендеринга SceneKit) выполняет цикл рендеринга, обрабатывающий и затем рисующий сцену. Обработка кадра в сцене показывает шаги в этом цикле.
Каждый раз через цикл рендеринга, представление SceneKit (или средство рендеринга) выполняет следующие действия в порядке:
Представление вызывает своего делегата
renderer:updateAtTime:
метод.SceneKit выполняет действия и выполняет анимации, присоединенные к графику сцены. (См.
SCNAction
класс иSCNAnimatable
протокол.)Представление вызывает своего делегата
renderer:didApplyAnimationsAtTime:
метод.SceneKit применяет свое моделирование физики к любым организациям физики в сцене. (См.
SCNPhysicsWorld
,SCNPhysicsBody
, и связанные классы.)Представление вызывает своего делегата
renderer:didSimulatePhysicsAtTime:
метод.Представление вызывает своего делегата
renderer:willRenderScene:atTime:
метод.SceneKit представляет график сцены в представлении.
Представление вызывает своего делегата
renderer:didRenderScene:atTime:
метод.
Работа с циклом рендеринга
При создании игры обычно необходимо выполнять логику, касающуюся геймплея перед каждым кадром анимации. Игровая логика может включать входную обработку, искусственный интеллект, игровые сценарии или другие задачи. Часто, результаты этой логики включают изменения внесения в узлы или рабочие действия с узлами.
Методы, перечисленные в Добавлении Пользовательской Логики к Циклу Рендеринга, обеспечивают места для реализации игровой логики. Какой из этих методов Вы реализуете, для которых задач зависит от Вашего игрового дизайна. Например, если Ваша игра использует физику, Вы могли бы реализовать renderer:didSimulatePhysicsAtTime:
метод, чтобы решить, выиграл ли проигрыватель игру на основе состояния организаций физики в сцене. Если Ваш геймплей не на основе моделирования физики, Вы могли бы принять такие решения в renderer:updateAtTime:
метод вместо этого.
Пользовательский рендеринг
Если Вы хотите выполнить пользовательский рендеринг прежде или после того, как SceneKit представляет содержание сцены, реализуйте один или оба метода, перечисленные в Рендеринге Пользовательского Содержания Сцены с OpenGL. Эти методы являются подходящими для пользовательского OpenGL , рисующего, который не зависит от структуры или содержания графика сцены. Если Вы вместо этого хотите использовать OpenGL для рендеринга специального эффекта, который присоединен к определенному расположению в сцене, посмотрите Ссылку на протокол SCNNodeRendererDelegate. Или если Вы хотите использовать программы программы построения теней OpenGL для настройки рендеринга SceneKit содержания сцены, см. Ссылку на протокол SCNShadable.
-
Говорит делегату выполнять любые обновления, которые должны произойти перед действиями оценены анимации и физика. (требуемый)
Объявление
Swift
optional func renderer(_
aRenderer
: SCNSceneRenderer, updateAtTimetime
: NSTimeInterval)Objective C
- (void)renderer:(id<SCNSceneRenderer>)
aRenderer
updateAtTime:(NSTimeInterval)time
Параметры
aRenderer
Объект SceneKit, ответственный за рендеринг сцены.
time
Текущее системное время, в секундах. Используйте этот параметр для любых основанных на времени элементов Вашей игровой логики.
Обсуждение
SceneKit вызывает этот метод точно один раз на кадр, пока
SCNView
объект (или другойSCNSceneRenderer
объект), отображение сцены не приостанавливается.Реализуйте этот метод для добавления игровой логики к циклу рендеринга. Любые изменения, которые Вы вносите в график сцены во время этого метода, сразу отражаются в выведенной на экран сцене. Т.е. SceneKit сразу обновляет иерархию узлов представления, которые это использует для рендеринга сцены (вместо того, чтобы использовать
SCNTransaction
класс для “обрабатывания изменений в пакетном режиме”).Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Говорит делегату выполнять любые обновления, которые должны произойти после того, как действия и анимации оценены. (требуемый)
Объявление
Swift
optional func renderer(_
aRenderer
: SCNSceneRenderer, didApplyAnimationsAtTimetime
: NSTimeInterval)Objective C
- (void)renderer:(id<SCNSceneRenderer>)
aRenderer
didApplyAnimationsAtTime:(NSTimeInterval)time
Параметры
aRenderer
Объект SceneKit, ответственный за рендеринг сцены.
time
Текущее системное время, в секундах. Используйте этот параметр для любых основанных на времени элементов Вашей игровой логики.
Обсуждение
SceneKit вызывает этот метод точно один раз на кадр, пока
SCNView
объект (или другойSCNSceneRenderer
объект), отображение сцены не приостанавливается.Реализуйте этот метод для добавления игровой логики к циклу рендеринга. Любые изменения, которые Вы вносите в график сцены во время этого метода, сразу отражаются в выведенной на экран сцене. Т.е. SceneKit сразу обновляет иерархию узлов представления, которые это использует для рендеринга сцены (вместо того, чтобы использовать
SCNTransaction
класс для “обрабатывания изменений в пакетном режиме”).Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Говорит делегату выполнять любые обновления, которые должны произойти после того, как моделирования физики выполняются. (требуемый)
Объявление
Swift
optional func renderer(_
aRenderer
: SCNSceneRenderer, didSimulatePhysicsAtTimetime
: NSTimeInterval)Objective C
- (void)renderer:(id<SCNSceneRenderer>)
aRenderer
didSimulatePhysicsAtTime:(NSTimeInterval)time
Параметры
aRenderer
Объект SceneKit, ответственный за рендеринг сцены.
time
Текущее системное время, в секундах. Используйте этот параметр для любых основанных на времени элементов Вашей игровой логики.
Обсуждение
SceneKit вызывает этот метод точно один раз на кадр, пока
SCNView
объект (или другойSCNSceneRenderer
объект), отображение сцены не приостанавливается.Реализуйте этот метод для добавления игровой логики к циклу рендеринга. Любые изменения, которые Вы вносите в график сцены во время этого метода, сразу отражаются в выведенной на экран сцене. Т.е. SceneKit сразу обновляет иерархию узлов представления, которые это использует для рендеринга сцены (вместо того, чтобы использовать
SCNTransaction
класс для “обрабатывания изменений в пакетном режиме”).Этот метод является последней возможностью, SceneKit предусматривает Вас для изменения графика сцены перед рендерингом.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Говорит делегату, что средство рендеринга представило сцену. (требуемый)
Объявление
Swift
optional func renderer(_
aRenderer
: SCNSceneRenderer, didRenderScenescene
: SCNScene, atTimetime
: NSTimeInterval)Objective C
- (void)renderer:(id<SCNSceneRenderer>)
aRenderer
didRenderScene:(SCNScene *)scene
atTime:(NSTimeInterval)time
Параметры
aRenderer
Объект SceneKit, ответственный за рендеринг сцены. Исследуйте этот объект
context
свойство, если необходимо сослаться на контекст OpenGL, который вовлекает пользовательский код рендеринга.scene
Представленный объект сцены.
time
Текущее системное время, в секундах. Если Ваш пользовательский рендеринг включает анимацию, используйте этот параметр для вычислений собственного состояния анимации.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Говорит делегату, что средство рендеринга очистило область просмотра и собирается представить сцену. (требуемый)
Объявление
Swift
optional func renderer(_
aRenderer
: SCNSceneRenderer, willRenderScenescene
: SCNScene, atTimetime
: NSTimeInterval)Objective C
- (void)renderer:(id<SCNSceneRenderer>)
aRenderer
willRenderScene:(SCNScene *)scene
atTime:(NSTimeInterval)time
Параметры
aRenderer
Объект SceneKit, ответственный за рендеринг сцены. Исследуйте этот объект
context
свойство, если необходимо сослаться на контекст OpenGL, который вовлекает пользовательский код рендеринга.scene
SCNScene
объект, который будет представлен.time
Текущее системное время, в секундах. Если Ваш пользовательский рендеринг включает анимацию, используйте этот параметр для вычислений собственного состояния анимации.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.