На iOS с OpenGLES как иметь несколько представлений?
На iOS, если я хочу наложить два вида, а затем смешать одну сцену с другой.
Например: от меню игры до самой игры. Сначала выберите меню, затем нажмите ("начать игру"), загрузите вид игры и сделайте хорошее смешивание / преобразование из меню на игровую сцену.
Это не конкретный вопрос для смешивания, а о том, как обрабатывать несколько представлений в приложении OpenGL. Я читал и играл с некоторыми основами о том, как рисовать линии, объекты, молнии, цвета и тому подобное, но я полностью зелен, когда речь идет о том, чтобы собрать все это вместе в реальном (а не в одном статическом виде) приложении OpenGLES. Я имею в виду, что вы должны использовать разные взгляды, верно? Или этот шаблон проектирования с различными контроллерами представления и представлениями, к которым мы все привыкли в повседневном программировании UIKit, неприменим, когда речь идет об OpenGLES? Потому что я просто не могу этого сделать. И я не могу найти никаких примеров.
2 ответа
Ну, я нашел то, что я искал в http://cocos2d-iphone.org/
Он дает вам слои, переходы сцен, готовые к работе меню, спрайты и т. Д. Поэтому я перестал беспокоиться о том, как это сделать, и просто сейчас использую кокосы.
Не стесняйтесь, если вы новичок в OpenGL, это облегчит вашу жизнь в 147* раз. И кстати... вы также можете объединить его с 3D.
Если вы хотите, чтобы в вашем приложении было несколько одновременно видимых представлений OpenGL в форме CAEAGLLayers, важно помнить следующее:
[EAGLContext setCurrentContext:oglContext]
изменит контекст не только для представления, которое выполняется в данный момент, но и для всех представлений EAGL вашего приложения. Это может проявиться путем создания других представлений, которые работали для замораживания, поскольку вызовы OpenGL теперь переходят к последнему представлению, которое выполняло [EAGLContext setCurrentContext:oglContext]
,
Чтобы обойти это, вы должны позвонить [EAGLContext setCurrentContext:oglContext]
каждый раз, когда вызывается ваш экземпляр view, прежде чем делать какие-либо вызовы OpenGL.
В моем приложении я устанавливаю контекст только один раз, в представлении initWithFrame
, Это работало хорошо в течение многих лет. Как только я создал второй экземпляр этого представления, первое представление перестало обновляться. Теперь я устанавливаю контекст в своих вызовах обновления, прежде чем делать какие-либо вызовы CVOpenGLES.