2012-03-13 3 views
5

Какая разница, цель мудрая между этими двумя методами в моем цикле рендеринга?Разница между glkView: drawInRect: и glkViewControllerUpdate :? OpenGL ES 2 - iOS

Apple, это сказать ....

об обновлении() Контроллер зрения называет своего делегата glkViewControllerUpdate: метод. Ваш делегат должен обновить данные фрейма, которые не связаны с отображением результатов на экране.

О drawInRect: объект GLKView делает его контекст OpenGL ES текущий контекст и связывает его фреймбуфера в качестве мишени для рендеринга OpenGL ES команд. Затем ваш метод делегата нарисует содержимое представления.

Так что, в основном, когда я создаю GLKView в своем контроллере, этот контроллер становится delate, поэтому я рассматриваю эти методы бок о бок.

Я предположил, что update() должен содержать любые преобразования или другую логику.

ответ

4

В первую очередь, Apple пытается помочь вам отделить синхронизацию от частоты кадров. Если вашей игре всегда удается нарисовать кадр за время, выделенное для одного кадра, два будут выполняться в режиме блокировки. Но даже если на экране появится много объектов, а частота кадров провисает немного, вы все равно получите такое же количество обновлений за секунду, чтобы объекты все равно двигались с одинаковой скоростью.

Во-вторых, они помогают вам разделить свой код как контроллер модели. Как ваши объекты должны быть отделены от того, как они действуют.

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

+0

Я вижу. Так, например, в Space Invaders, новый корабль, вводящий образ модели или игрок, масштабирующийся на планете, будет обязан обновлять. В то время как drawInRect: просто проектирует матрицу, до нужной частоты кадров, но не всегда в состоянии поддерживать скорость в зависимости от нагрузки. –

+0

Да - любая логика, которая обновляет состояние игры, будет частью обновления, будь то добавление новой модели или перемещение камеры. – Tommy

Смежные вопросы