使用 spacemanager,我需要在每一步之后对选定的主体执行一个操作,所以我认为为 iterateFunc 定义我自己的 C 函数将是可行的方法。
一切都很好,除了我不确定如何在同一个类中调用 obj c 方法。换句话说,一个 obj c 类既包含替换 iterateFunc 的 c 函数,也包含需要调用的方法。我不知道如何告诉 c 函数“自我”是什么,以便我可以调用该方法。据我所知,没有办法将任何额外信息传递给新的 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)调用。到了一半,我意识到我什至不必这样做,因为我需要做的只是子类化和定义我自己的 step 方法。我的新步骤方法:
-(void) step: (cpFloat) delta
{
[super step:delta];
//Having of course set the "myObject" variable elsewhere as my other object
[myObject doThis];
}
谢谢,bbum 你的回答,并帮助我在未来提出更好的问题。