настольная игра iPhone: OpenGL ES или CoreGraphics? [закрытый]

Объявление

прототип для функции, которая берет параметр функции, похож на следующее:

void func ( void (*f)(int) );

Это указывает, что параметр f будет указателем на функцию, которая имеет void тип возврата и которая берет сингл int параметр. Следующая функция (print) является примером функции, которая могла быть передана func в качестве параметра, потому что это - надлежащий тип:

void print ( int x ) {
  printf("%d\n", x);
}

Вызов функции

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

func(print);

звонил бы func, передавая функцию печати ему.

Тело функции

Как с любым параметром, func может теперь использовать имя параметра в теле функции для доступа к значению параметра. Скажем, это, func применит функцию, это передается номерам 0-4. Рассмотрите, во-первых, на что цикл был бы похож для вызова печати непосредственно:

for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
  print(ctr);
}

С тех пор func в объявлении параметра говорится, что f название указателя на желаемую функцию, мы вспоминаем сначала, что, если f указатель тогда *f, вещь что f точки к (т.е. функция print в этом случае). В результате просто замените каждое возникновение печати в цикле выше с [1 117]:

void func ( void (*f)(int) ) {
  for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
    (*f)(ctr);
  }
}

От [1 118] http://math.hws.edu/bridgeman/courses/331/f05/handouts/c-c++-notes.html

17
задан Peter Hosey 1 October 2009 в 05:13
поделиться

7 ответов

На самом деле, в этом случае я бы предложил Core Animation или даже сами UIViews. Если вы напрямую отрисовываете все свои элементы в одном представлении через Core Graphics, а затем обновляете это представление для каждого кадра анимации, вы получите ужасную производительность.

Я бы предложил рисовать отдельные элементы игрового поля (фигуры, фишки, квадраты доски и т. Д.) Как отдельные UIViews или CALayers, а затем анимировать эти слои или виды вокруг. UIViews не намного тяжелее, чем CALayers, и они используют Core Animation за кулисами для простого перемещения, масштабирования, или затухающие анимации. Они также могут реагировать на сенсорные события. CALayers полезны, если вы хотите создать более кроссплатформенную (Mac и iPhone) игру или если вам нужно делать более сложные анимации.

Для двухмерной игры я бы отложил OpenGL до тех пор, пока вы абсолютно уверен, что вы не сможете получить от Core Animation желаемую производительность. OpenGL намного менее элегантен для кодирования.

В качестве хорошего примера того, как сделать настольную игру с использованием Core Animation, Apple предоставила пример кода GeekGameBoard . Хотя это приложение для Mac, код Core Animation может транслироваться прямо на iPhone.

Я воздержусь от использования OpenGL до тех пор, пока вы не будете абсолютно уверены, что не сможете получить желаемую производительность от Core Animation. OpenGL намного менее элегантен для кодирования.

В качестве хорошего примера того, как сделать настольную игру с использованием Core Animation, Apple предоставила пример кода GeekGameBoard . Хотя это приложение для Mac, код Core Animation может транслироваться прямо на iPhone.

Я воздержусь от использования OpenGL до тех пор, пока вы не будете абсолютно уверены, что не сможете получить желаемую производительность от Core Animation. OpenGL намного менее элегантен для кодирования.

В качестве хорошего примера того, как сделать настольную игру с использованием Core Animation, Apple предоставила пример кода GeekGameBoard . Хотя это приложение для Mac, код Core Animation может транслироваться прямо на iPhone.

21
ответ дан 30 November 2019 в 11:44
поделиться

OpenGL, если все сделано правильно, вероятно, будет выглядеть лучше. Однако, насколько я понимаю, это намного сложнее, чем CoreGraphics, если вы не знаете, как он работает.

Однако, если вы не знакомы с ним, CoreGraphics легче понять. Я не очень хорошо разбираюсь в OpenGL, поэтому, когда я писал игру, я делал это в CoreGraphics, и получилось неплохо.

3
ответ дан 30 November 2019 в 11:44
поделиться

Если ваша перспектива в основном вид сверху, пользовательский вид находится в фиксированной позиции, и вам не нужно наложение текстуры во время выполнения или специальное освещение, тогда будет проще базовая графика. В противном случае я бы выбрал OpenGL (или один из тех сторонних наборов для создания игр, как Unity, которые упрощают его).

Это действительно зависит от того, какой вид вы собираетесь использовать.

3
ответ дан 30 November 2019 в 11:44
поделиться

Если вы не очень голодны по производительности, какая плата игра, вероятно, нет, пойти с CoreGraphics. Вы получаете возможность работать на более высоком уровне абстракции, а также получаете некоторые вещи, которые придется писать вручную, например, анимацию. (PS Полагаю, Вы говорите о 2D.)

2
ответ дан 30 November 2019 в 11:44
поделиться

OpenGL. В конечном итоге это того стоит, и я подумал, что процесс обучения для 2D-спрайтов будет даже проще, чем CoreGraphics.

0
ответ дан 30 November 2019 в 11:44
поделиться

Вы также можете попробовать cocos2d для iphone - это довольно полнофункциональная библиотека 2D-игр; в нем есть тайловые карты, спрайты, параллакс, планирование и т. д. Я использую его в своей игре, и это мне очень помогло.

http://code.google.com/p/cocos2d-iphone/

6
ответ дан 30 November 2019 в 11:44
поделиться

Для этого определенно основная графика и основная анимация. В блоге Джеффа ЛеМарче есть образец шаблона для игры в Блэк Джек - я только что закончил головоломку судуко с этим подходом. Что касается cocos2D, который я использую для платформенной игры - openGL не улучшит и не улучшит графику - он определенно не сделает графику лучше - вы можете от души фотошопить на этом и чувствовать себя в безопасности и знать, что он будет выглядеть великолепно . Изучение Cocos2D для этого - слишком много накладных расходов - как и изучение openGL ES - просто используйте основную графику и получите ее. Насколько известно openGL ES на будущее - конечно, - но вы должны понять "ядро" Apple, прежде чем пытаться это сделать.

2
ответ дан 30 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: