Android: выбор между SurfaceView и OpenGL (GLSurfaceView)
Есть ли способ решить фронт на основе ожидаемой сложности игры/приложения на этапе планирования, следует ли использовать обычный холст-рисунок в SurfaceView или идти с OpenGL?
Я играл с Canvas и мне нужно только 2D-движение, и на довольно новом телефоне я получаю довольно приличную производительность с кучей примитивных объектов и несколькими растровыми изображениями, которые бегают по экрану на сплошном фоне.
Можно ли сказать, что если я собираюсь рисовать фоновые изображения и увеличивать количество перемещаемых объектов и рисовать поверх них, то я должен перейти прямо к OpenGL?
Ответы
Ответ 1
Все, что я могу сказать, это то, что это зависит от того, сколько спрайтов вы собираетесь использовать. Крис Прюетт из Google также хорошо документировал эту часть.
Google I/O 2009 и Google I/O 2010.
Ниже приведена картинка с одного из его слайдов, относящихся к вашей теме:
![enter image description here]()
С этими знаниями вы должны пойти с OpenGL, используя расширение draw_texture
. Не забудьте запросить строку и проверьте, поддерживается ли draw_texture
на самом устройстве.
Для получения дополнительной информации, связанной с развитием игры в целом, см. this.
Ответ 2
SurfaceView
A GLSurfaceView - это SurfaceView, который можно визуализировать с помощью OpenGL. Выбор между ними прост:
Если вы знакомы с OpenGL и нуждаетесь в том, что он предоставляет, используйте GLSurfaceView. В противном случае используйте SurfaceView. OpenGL является низкоуровневым. Если вы еще не знакомы с этим, это обязательство учиться. Если вам нужен только 2D-чертеж, SurfaceView использует высокий уровень, разумно высокопроизводительный холст. С ним очень легко работать.
Если у вас нет оснований использовать GLSurfaceView, вы должны использовать регулярный SurfaceView. Я бы предположил, что если вы еще не знаете что вам нужно GL, тогда вы, вероятно, этого не сделаете.
OpenGL
OpenGL сможет легко обрабатывать вращения и масштабировать.
Честно говоря, вам, вероятно, нужно будет изучить много OpenGL, чтобы это сделать, особенно связанных с темами:
Геометрическое освещение (или просто его отключение) Выбор (выбор геометрии рисовать на нем). Пиксельные карты. Отображение текстур. Mipmapping. Кроме того, обучение OpenGL для этого может быть излишним, и вы должны быть довольно хорошо, чтобы сделать его эффективным.
Вместо этого я бы рекомендовал использовать графические компоненты игры библиотека, построенная поверх openGL, например:
Cocos2d
libgdx
Любой из перечисленных здесь двигателей
Источник
Разница между SurfaceView и GLSurfaceView в Android
Android: Canvas vs OpenGL