Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы SceneKit ссылка на протокол SCNSceneRendererDelegate

Опции
Развертывание Target:

На этой странице
Язык:

SCNSceneRendererDelegate

SCNSceneRendererDelegate протокол определяет методы, позволяющие Вашему приложению участвовать в анимации SceneKit и представляющий процесс. Для создания приложения или игры с SceneKit Вы используете SCNView объект (или другой объект, соответствующий SCNSceneRenderer протокол) для отображения сцены. Затем чтобы добавить игровую логику на кадр или выполнить пользовательский OpenGL, представляющий прежде или после, SceneKit представляет сцену, укажите свой собственный объект, реализующий SCNSceneRendererDelegate протокол для представления delegate свойство.

При рендеринге сцены, SCNView объект (или другое средство рендеринга SceneKit) выполняет цикл рендеринга, обрабатывающий и затем рисующий сцену. Обработка кадра в сцене показывает шаги в этом цикле.

Обработка рисунка 1Frame в сцене image: ../Art/SCNSceneRendererDelegate_2x.png

Каждый раз через цикл рендеринга, представление SceneKit (или средство рендеринга) выполняет следующие действия в порядке:

  1. Представление вызывает своего делегата renderer:updateAtTime: метод.

  2. SceneKit выполняет действия и выполняет анимации, присоединенные к графику сцены. (См. SCNAction класс и SCNAnimatable протокол.)

  3. Представление вызывает своего делегата renderer:didApplyAnimationsAtTime: метод.

  4. SceneKit применяет свое моделирование физики к любым организациям физики в сцене. (См. SCNPhysicsWorld, SCNPhysicsBody, и связанные классы.)

  5. Представление вызывает своего делегата renderer:didSimulatePhysicsAtTime: метод.

  6. Представление вызывает своего делегата renderer:willRenderScene:atTime: метод.

  7. SceneKit представляет график сцены в представлении.

  8. Представление вызывает своего делегата renderer:didRenderScene:atTime: метод.

Работа с циклом рендеринга

При создании игры обычно необходимо выполнять логику, касающуюся геймплея перед каждым кадром анимации. Игровая логика может включать входную обработку, искусственный интеллект, игровые сценарии или другие задачи. Часто, результаты этой логики включают изменения внесения в узлы или рабочие действия с узлами.

Методы, перечисленные в Добавлении Пользовательской Логики к Циклу Рендеринга, обеспечивают места для реализации игровой логики. Какой из этих методов Вы реализуете, для которых задач зависит от Вашего игрового дизайна. Например, если Ваша игра использует физику, Вы могли бы реализовать renderer:didSimulatePhysicsAtTime: метод, чтобы решить, выиграл ли проигрыватель игру на основе состояния организаций физики в сцене. Если Ваш геймплей не на основе моделирования физики, Вы могли бы принять такие решения в renderer:updateAtTime: метод вместо этого.

Пользовательский рендеринг

Если Вы хотите выполнить пользовательский рендеринг прежде или после того, как SceneKit представляет содержание сцены, реализуйте один или оба метода, перечисленные в Рендеринге Пользовательского Содержания Сцены с OpenGL. Эти методы являются подходящими для пользовательского OpenGL , рисующего, который не зависит от структуры или содержания графика сцены. Если Вы вместо этого хотите использовать OpenGL для рендеринга специального эффекта, который присоединен к определенному расположению в сцене, посмотрите Ссылку на протокол SCNNodeRendererDelegate. Или если Вы хотите использовать программы программы построения теней OpenGL для настройки рендеринга SceneKit содержания сцены, см. Ссылку на протокол SCNShadable.

Наследование


Не применимый

Соответствует


Оператор импорта


Swift

import SceneKit

Objective C

@import SceneKit;

Доступность


Доступный в OS X v10.8 и позже.
  • Говорит делегату выполнять любые обновления, которые должны произойти перед действиями оценены анимации и физика. (требуемый)

    Объявление

    Swift

    optional func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: 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

    Доступность

    Доступный в OS X v10.10 и позже.

  • Говорит делегату выполнять любые обновления, которые должны произойти после того, как действия и анимации оценены. (требуемый)

    Объявление

    Swift

    optional func renderer(_ aRenderer: SCNSceneRenderer, didApplyAnimationsAtTime time: 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

    Доступность

    Доступный в OS X v10.10 и позже.

  • Говорит делегату выполнять любые обновления, которые должны произойти после того, как моделирования физики выполняются. (требуемый)

    Объявление

    Swift

    optional func renderer(_ aRenderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: 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

    Доступность

    Доступный в OS X v10.10 и позже.

  • Говорит делегату, что средство рендеринга представило сцену. (требуемый)

    Объявление

    Swift

    optional func renderer(_ aRenderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: 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

    Доступность

    Доступный в OS X v10.8 и позже.

  • Говорит делегату, что средство рендеринга очистило область просмотра и собирается представить сцену. (требуемый)

    Объявление

    Swift

    optional func renderer(_ aRenderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: 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

    Доступность

    Доступный в OS X v10.8 и позже.