Ваши знания и мысли о получении доступа к переменным экземпляра Obj-C в коде C путем передачи их по ссылке кажутся правильными.
Если вам нужно передать несколько переменных, я предполагаю, что они вместе составляют какое-то описание "игрового состояния". Возможно, их можно сгруппировать в отдельный объект или структуру и передать в функцию C через один параметр?
В качестве примера приведен следующий класс:
typedef struct GameState {
int score;
int numberOfBulletsLeft;
} GameState;
@interface GAME : NSObject {
GameState state;
}
...
@end
будет хорошо работать с функцией C, такой как следующее
void myCFunctionThatDoesCollisiondetectionEtc(GameState * state) {
NSLog(@"You have %d bullets left", state->numberOfBulletsLeft);
}
Если ваш существующий объект GAME имеет подходящие свойства или сообщения, вы можете даже сделать что-то вроде следующего, где вы просто передаете весь объект Objective-C:
void myCFunctionThatDoesCollisionDetectionEtc(GAME * myGame) {
if (...)
[myGame increaseScore:50];
else
[myGame decreaseScore:50];
}
Третий вариант - изменить возвращаемое значение вашей функции C, чтобы указать, было ли обнаружено столкновение, а затем оставить его на усмотрение кода Objective-C в классе GAME, чтобы обновить счет и любые другие действия, которые могут должно произойти.