Объявление
прототип для функции, которая берет параметр функции, похож на следующее:
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
На самом деле, в этом случае я бы предложил 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.
OpenGL, если все сделано правильно, вероятно, будет выглядеть лучше. Однако, насколько я понимаю, это намного сложнее, чем CoreGraphics, если вы не знаете, как он работает.
Однако, если вы не знакомы с ним, CoreGraphics легче понять. Я не очень хорошо разбираюсь в OpenGL, поэтому, когда я писал игру, я делал это в CoreGraphics, и получилось неплохо.
Если ваша перспектива в основном вид сверху, пользовательский вид находится в фиксированной позиции, и вам не нужно наложение текстуры во время выполнения или специальное освещение, тогда будет проще базовая графика. В противном случае я бы выбрал OpenGL (или один из тех сторонних наборов для создания игр, как Unity, которые упрощают его).
Это действительно зависит от того, какой вид вы собираетесь использовать.
Если вы не очень голодны по производительности, какая плата игра, вероятно, нет, пойти с CoreGraphics. Вы получаете возможность работать на более высоком уровне абстракции, а также получаете некоторые вещи, которые придется писать вручную, например, анимацию. (PS Полагаю, Вы говорите о 2D.)
OpenGL. В конечном итоге это того стоит, и я подумал, что процесс обучения для 2D-спрайтов будет даже проще, чем CoreGraphics.
Вы также можете попробовать cocos2d для iphone - это довольно полнофункциональная библиотека 2D-игр; в нем есть тайловые карты, спрайты, параллакс, планирование и т. д. Я использую его в своей игре, и это мне очень помогло.
Для этого определенно основная графика и основная анимация. В блоге Джеффа ЛеМарче есть образец шаблона для игры в Блэк Джек - я только что закончил головоломку судуко с этим подходом. Что касается cocos2D, который я использую для платформенной игры - openGL не улучшит и не улучшит графику - он определенно не сделает графику лучше - вы можете от души фотошопить на этом и чувствовать себя в безопасности и знать, что он будет выглядеть великолепно . Изучение Cocos2D для этого - слишком много накладных расходов - как и изучение openGL ES - просто используйте основную графику и получите ее. Насколько известно openGL ES на будущее - конечно, - но вы должны понять "ядро" Apple, прежде чем пытаться это сделать.