Используя spacemanager, мне нужно выполнять действия с выбранными телами после каждого шага, поэтому я решил, что лучше определить собственную функцию C для iterateFunc.
Все отлично работает, кроме меняЯ не уверен, как затем вызвать метод obj c в том же классе.Другими словами, класс obj c содержит как функцию c, заменяющую iterateFunc, так и метод, который необходимо вызвать.Я не понимаю, как сказать функции c, что такое «self», чтобы я мог вызвать метод.Насколько я могу судить, нет никакой возможности передать какую-либо дополнительную информацию новому iterateFunc.
Какие-нибудь идеи или лучший способ идти дальше?
Обновление:
Спасибо за ответ.Объявив новый spacemanager, можно переопределить его iterateFunc:
smgr = [[SpaceManager alloc] init];
smgr.iterateFunc=doThisFunc;
В том же классе может быть объявлена функция doThisFunc.
В spacemanager эта iterateFunc
вызывается изметод "step":
-(void) step: (cpFloat) delta
{
.....
cpSpaceHashEach(_space->activeShapes, _iterateFunc, self);
....
}
Итак, моей первой мыслью было создание подкласса spacemanager, и в моем методе пользовательского шага я вызываю cpSpaceHashEach
с моим собственным классом вместо self (т.е. spacemanager),На полпути я понял, что мне даже не нужно было этого делать, поскольку все, что мне нужно было сделать, это создать подклассы и определить свой собственный метод шага.Мой новый метод шага:
-(void) step: (cpFloat) delta
{
[super step:delta];
//Having of course set the "myObject" variable elsewhere as my other object
[myObject doThis];
}
Спасибо, bbum за ваши ответы и за то, что помогли мне составить лучшие вопросы в будущем.